J'ai besoin que le proxy nginx utilise le cache si le serveur principal est en panne:
c'est ma configuration. mais semble être nginx utiliser le cache sans vérifier le serveur backend.
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;
}
}
}
La question est de savoir comment puis-je contourner le cache proxy si le serveur principal est en marche? Et lorsque le serveur principal est en marche, mon serveur proxy n'utilise pas du tout de cache.
Réponses:
Semble un double de ceci:
/programming/16756271/how-to-configure-nginx-to-serve-cached-content-only-when-backend-is-down-5xx-re
En bref, utilisez proxy_cache_use_stale
En tant que mise à jour, j'ai testé cela et cela fonctionne très bien. J'ai fait le test sur mon poste de travail où j'ai (pour être complet):
Fedora 23 nginx 1.8.1 configuré comme terminateur ssl + cache + proxy inverse Apache 2.4.18 configuré pour écouter au port 80
Avec apache agissant en amont, servant juste un fichier statique, j'ai fait ce test:
La configuration nginx que j'ai utilisée est (uniquement les parties intéressantes):
nginx.conf:
/etc/nginx/conf.d/local.conf:
la source
Utilisez proxy_intercept_errors et proxy 500 pour un serveur sur lequel la mise en cache est activée.
la source