Ich muss Nginx-Proxy verwenden Cache, wenn Backend-Server ausfällt:
Das ist meine Konfiguration. aber scheint nginx Cache zu verwenden, ohne Backend-Server zu überprüfen.
http {
# ...
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_path /tmp/nginx levels=1:2 keys_zone=tmpzone:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
server {
server_name _;
location / {
proxy_connect_timeout 5s;
proxy_read_timeout 5s;
proxy_cache tmpzone;
proxy_cache_valid 200 304 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host 'www.example.com';
proxy_pass http://www.example.com;
}
}
}
Die Frage ist, wie kann ich den Proxy-Cache umgehen, wenn der Back-End-Server aktiv ist? Und wenn der Backend-Server aktiv ist, verwendet mein Proxyserver überhaupt keinen Cache.
Antworten:
Scheint ein Duplikat davon:
/programming/16756271/how-to-configure-nginx-to-serve-cached-content-only-when-backend-is-down-5xx-re
Kurz gesagt, verwenden Sie proxy_cache_use_stale
Als Update habe ich dies getestet und es funktioniert gut. Ich habe den Test auf meiner Workstation durchgeführt, auf der ich (der Vollständigkeit halber):
Fedora 23 nginx 1.8.1 konfiguriert als SSL-Terminator + Cache + Reverse Proxy Apache 2.4.18 konfiguriert für das Abhören an Port 80
Mit Apache als Upstream, der nur eine statische Datei bereitstellt, habe ich diesen Test durchgeführt:
Die von mir verwendete Nginx-Konfiguration ist (nur die interessanten Teile):
nginx.conf:
/etc/nginx/conf.d/local.conf:
quelle
Verwenden Sie proxy_intercept_errors und proxy 500s für einen Server, für den das Caching aktiviert ist.
quelle