Estoy usando nginx para archivos estáticos y quiero que el navegador almacene en caché todos los archivos, pero no index.html. Intenté seguir la configuración, pero también obtengo el encabezado de respuesta de caché para index.html. ¿Cómo puedo cambiar la configuración?
server{
location = / {
try_files $uri $uri/ =404;
}
location / {
try_files $uri $uri/ =404;
add_header 'Cache-Control' "public, max-age=3600";
}
}
Solución del problema
Para comprender la lógica de la try_files $uri $uri/...
directiva (y todo el comportamiento de nginx), le recomiendo que lea esta respuesta en ServerFault. Lo esencial es
Lo muy importante pero absolutamente no obvio es que una index
directiva que se usa try_files $uri $uri/ =404
puede causar una redirección interna.
Esto es lo que sucede con su configuración actual. El $uri/
argumento de la try_files
directiva hace que nginx realice una redirección interna de /
a /index.html
, y ese URI, a su vez, es procesado por location / {... }
, no por location = / {... }
! Para lograr lo que quieres puedes usar
location = /index.html {
try_files $uri $uri/ =404;
}
location / {
try_files $uri $uri/ =404;
add_header 'Cache-Control' "public, max-age=3600";
}
Además, dado que el try_files $uri $uri/ =404;
comportamiento de nginx es predeterminado, puede simplificarlo aún más para
location = /index.html {}
location / {
add_header 'Cache-Control' "public, max-age=3600";
}
No hay comentarios.:
Publicar un comentario