Pregunta

Estoy tratando de decirle a nginx para la caché de algunos de mis bienes (js, css) para siempre, o al menos por un tiempo muy largo.

La idea es que una vez que un paquete de activos es compilado y publicado con un /assets/ URI prefijo (por ejemplo, /assets/foo-{fingerprint}.js) se queda allí y no siempre se necesita para cambiar.

La internets me dijo que debería escribir la siguiente regla:

location ~ ^/assets/.*-([^.]+)\.(js|css)$ {
  gzip_static on; # there's also a .gz of the asset
  expires max;
  add_header Cache-Control public;
  add_header Last-Modified "";
  add_header ETag "";
  break;
}

Yo esperaría que esto podría resultar en respuestas con el código HTTP 304 "No Modificado", pero lo que veo es una constante HTTP 200 (OK) todo el tiempo.

He probado algunos otros enfoques, por ejemplo:

a) establecer explícitamente el tiempo de modificación a un punto constante en el tiempo en el pasado;

add_header Last-Modified "Thu, 01 Jan 1970 00:00:00 GMT";

b) el cambio a If-None-Match los cheques;

add_header ETag $1;
if_modified_since off;

Sin embargo, la única cosa que realmente funciona como se necesitaba era este:

add_header Last-Modified "Thu, 01 Jan 2030 00:00:00 GMT";
if_modified_since before;

Estoy perdido.Esto es contrario a todo lo que creía que era correcto.Por favor, ayudar.

¿Fue útil?

Solución

Usted debe cambiar su internets, ya que ellos le dan mal los consejos.

Simplemente quitar todos los add_header las líneas de su ubicación (así como el excedente de brake):

location ~ ^/assets/.*-([^.]+)\.(js|css)$ {
   gzip_static on; # there's also a .gz of the asset
   expires max;
}

y leer la documentación de la verdadera Internet: http://nginx.org/r/expires y http://tools.ietf.org/html/rfc2616

Otros consejos

Parece que parte de mi configuración.Durante mi investigación me di cuenta de que el navegador utiliza el análisis heurístico para validar las solicitudes con ConditionalGet encabezados (E-Tag, de Última Modificación).Hace un montón de sentido para el back-end de las respuestas, de modo que usted puede manejar eso para ahorrar recursos del servidor.

Pero en términos de los archivos estáticos (js, css, imágenes), se puede deducir navegador para que les sirva de inmediato sin ningún tipo de Get Condicional de validación.Es útil si usted nombre de archivo de actualización si cualquier cambio tiene lugar.

Esta parte de la configuración hace que esto suceda:

add_header Cache-Control public;
add_header Last-Modified "";
add_header ETag "";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top