Ist es möglich, Nginx so einzurichten, dass es als Reverse-Proxy für einen Server fungiert, aber wenn die Datei auf Server A nicht vorhanden ist, dann ein Fallback auf Server B erfolgt, wo die Datei definitiv sein wird?
Ich muss eine 2 TB S3-Migration durchführen und es würde den Vorgang vereinfachen, wenn Nginx auf diese Weise eingerichtet werden könnte.
Folgendes verwende ich derzeit als Reverse-Proxy-Konfiguration:
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;
}
Antwort1
Nginx Plus verfügt über eine aktive Integritätsprüfungsfunktion. Sie können die beiden Server zu einer Upstream-Gruppe hinzufügen, eine aktive Integritätsprüfung in Bezug auf die URI für die Datei durchführen und wenn ein 404-Fehler zurückgegeben wird, markiert Nginx diesen Server als fehlerhaft und alle Anfragen werden an den anderen Server in der Gruppe weitergeleitet.
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-health-check/#hc_active
Dadurch wird jedoch Ihr gesamter Datenverkehr auf den anderen Server umgeleitet.
Wenn Sie die Kontrolle über den Upstream haben, können Sie auch Folgendes verwenden X-Accel
:
https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/
Wenn die Datei im Upstream nicht vorhanden wäre, würde der Upstream den X-Accel-Redirect
Header zurückgeben, den der Reverse-Proxy lesen und die Datei vom anderen Server anfordern würde.