GOOGLE ADS

lunes, 18 de abril de 2022

¿Cómo configurar el encabezado de respuesta de caché solo para la ruta raíz?

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 indexdirectiva que se usa try_files $uri $uri/ =404puede causar una redirección interna.

Esto es lo que sucede con su configuración actual. El $uri/argumento de la try_filesdirectiva 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

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...