是否可以設定 nginx 來反向代理到伺服器,但如果伺服器 A 上不存在該文件,則可以回退到該文件肯定會在的伺服器 B。
我需要進行 2TB S3 遷移,如果可以透過這種方式設定 nginx,將會簡化流程。
這是我目前用作反向代理配置的內容:
http {
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:100m
inactive=30d max_size=10g;
server {
location /image/ {
proxy_pass https://origin.example.com/;
proxy_set_header Host origin.example.com;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_cache STATIC;
proxy_cache_valid 200 30d;
proxy_cache_use_stale error timeout invalid_header updating
http_500 http_502 http_503 http_504;
}
答案1
Nginx Plus 具有主動健康檢查功能。您可以將 2 台伺服器新增至上游群組,對檔案的 URI 套用主動健康檢查,如果傳回 404 錯誤,Nginx 會將該伺服器標記為不健康,所有請求將流向另一台伺服器在群組中。
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-health-check/#hc_active
但是,這會將您的所有流量反彈到其他伺服器。
如果您可以控制上游,您也可以使用X-Accel
:
https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/
如果上游不存在該文件,則上游將返回標X-Accel-Redirect
頭,反向代理將讀取該標頭,並向其他伺服器請求該文件。