Necesito que el proxy nginx use caché si el servidor de fondo está inactivo:
Esta es mi configuración. pero parece que nginx usa caché sin verificar el servidor de fondo.
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 pregunta es ¿cómo puedo omitir el caché de proxy si el servidor de fondo está activo? Y cuando el servidor de fondo está activo, mi servidor proxy no usa caché en absoluto.
Respuestas:
Parece un duplicado de esto:
/programming/16756271/how-to-configure-nginx-to-serve-cached-content-only-when-backend-is-down-5xx-re
En resumen, use proxy_cache_use_stale
Como actualización, probé esto y funciona bien. Hice la prueba en mi estación de trabajo donde tengo (para completar):
Fedora 23 nginx 1.8.1 configurado como terminador ssl + caché + proxy inverso Apache 2.4.18 configurado para escuchar en el puerto 80
Con Apache actuando como ascendente, sirviendo solo un archivo estático, hice esta prueba:
La configuración de nginx que utilicé es (solo las partes interesantes):
nginx.conf:
/etc/nginx/conf.d/local.conf:
fuente
Use proxy_intercept_errors y proxy 500s para un servidor que tenga habilitado el almacenamiento en caché.
fuente