linux - pass - set cache nginx
nginx como proxy de caché no caché nada (4)
Asegúrese de que su backend no devuelva el encabezado Set-Cookie
. Si Nginx lo ve, desactiva el almacenamiento en caché.
Si este es tu caso, la mejor opción es arreglar tu backend. Cuando arreglar el backend no es una opción, es posible indicar a Nginx que ignore el encabezado Set-Cookie
proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";
Ver la documentation
proxy_ignore_header
se asegurará de que el almacenamiento en caché tenga lugar. proxy_hide_header
asegurará que la carga útil de la Cookie no esté incluida en la carga útil en caché. Esto es importante para evitar la pérdida de cookies a través del caché NGINX.
Estoy tratando de almacenar en caché el contenido estático que está básicamente dentro de las rutas a continuación en la configuración del servidor virtual. Por alguna razón, los archivos no se almacenan en caché. Veo varias carpetas y archivos dentro del directorio de caché pero siempre es algo así como 20 mb no más alto ni más bajo. Si se almacenaran imágenes en caché, por ejemplo, se necesitarían al menos 500 mb de espacio.
Aquí está la parte del caché nginx.conf:
** nginx.conf **
proxy_cache_path /usr/share/nginx/www/cache levels=1:2 keys_zone=static$
proxy_temp_path /usr/share/nginx/www/tmp;
proxy_read_timeout 300s;
Aquí está el servidor virtual predeterminado.
**sites-available/default**
server {
listen 80;
root /usr/share/nginx/www;
server_name myserver;
access_log /var/log/nginx/myserver.log main;
error_log /var/log/nginx/error.log;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location ~* ^/(thumbs|images|css|js|pubimg)/(.*)$ {
proxy_pass http://backend;
proxy_cache static;
proxy_cache_min_uses 1;
proxy_cache_valid 200 301 302 120m;
proxy_cache_valid 404 1m;
expires max;
}
location / {
proxy_pass http://backend;
}
}
Me gustaría agregar que múltiples opciones de configuración y combinaciones pueden deshabilitar el almacenamiento en caché de proxy en Nginx. Desafortunadamente esto está mal documentado.
En mi configuración, puse proxy_buffering on
y habilitó el almacenamiento en caché como se esperaba.
Por lo que vale la pena, mi experiencia es que nginx no siempre almacena en caché las cosas donde se lo dices.
Por ejemplo, en centos7, con la opción de configuración.
proxy_cache_path /tmp/my_nginx_cache levels=1:2 keys_zone=my_zone:10m inactive=24h max_size=1g;
nginx realmente almacena en caché los archivos en
/tmp/systemd-private-phJlfG/tmp/my_nginx_cache
después de revisar varias respuestas y comentarios, encontré que esta configuración finalmente funciona:
10m = 10mb caché de clave, tamaño máximo a 2GB, inactivo = 120m (actualización desde la fuente después de 120 minutos de inactivo), use_temp_path = apagado (para reducir io)
proxy_cache_valid - estado de caché de 200 y 302 por 60 minutos
proxy_cache_path /tmp/cache levels=1:2 keys_zone=default_cache:10m max_size=2g
inactive=120m use_temp_path=off;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 60m;
server {
listen 80;
server_name example.com;
# https://www.nginx.com/blog/nginx-caching-guide
location / {
proxy_cache default_cache;
proxy_buffering on;
proxy_ignore_headers Expires;
proxy_ignore_headers X-Accel-Expires;
proxy_ignore_headers Cache-Control;
proxy_ignore_headers Set-Cookie;
proxy_hide_header X-Accel-Expires;
proxy_hide_header Expires;
proxy_hide_header Cache-Control;
proxy_hide_header Pragma;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_pass http://ip-of-host:80;
#set $memcached_key "$uri?$args";
#memcached_pass 127.0.0.1:11211;
# error_page 404 502 504 = @fallback;
}
}