Pregunta La configuración caduca los encabezados para el contenido estático servido desde nginx


Estoy usando nginx para servir mi contenido estático, ¿hay alguna manera de configurar los encabezados de caducidad para cada archivo que cumpla con una regla específica? Por ejemplo, ¿puedo configurar el encabezado de caducidad para todos los archivos que tienen una extensión de '.css'?


85
2018-06-10 07:19


origen




Respuestas:


Prefiero hacer un encabezado de caché más completo, además de algunas extensiones de archivo más. Los '?' prefijo es una marca de 'no captura', nginx no creará un $ 1. Ayuda a reducir la carga innecesaria.

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
}

112
2017-11-25 21:07



No se encontraron todos mis archivos estáticos después de agregar eso. - Jürgen Paul
@JackSpairow: Realmente no puedo explicar por qué sucedió eso, ya que siempre me ha funcionado. ¿Está ejecutando Nginx perdiendo el módulo que proporciona add_header? Este tipo de cosas realmente tiene un alcance limitado, ¿está seguro de que otra desaceleración no es un problema en combinación? - J. M. Becker
Probablemente otro bloque tenía definición para los archivos estáticos con un root En ese caso, debe agregar las directivas a ese bloque. (Sé que esto es 2 años tarde, pero para futuros ciudadanos) - aularon
Personalmente aprecio las aclaraciones, especialmente para futuros buscadores porque a menudo aparecen mucho después de la publicación original. +1: P - J. M. Becker
El uso de esto desordena totalmente mi sitio web de wordpress. css y las imágenes no se muestran. ¿Hay algún otro conflicto en alguna parte? - user1641443


server {
    ...

    location ~* \.css$ {
       expires 30d;
    }
    ...
}

los location directiva

los expires directiva


21
2018-06-10 07:23





No tengo suficiente reputación para comentar por qué la respuesta aceptada causaría que los archivos dejaran de aparecer, ¡pero lo descubrí y me gustaría ayudarlo!

Version corta:

¡Asegúrese de tener un directorio raíz especificado para su bloque de ubicación en las imágenes si no tiene un conjunto global!

Versión larga a continuación:


En primer lugar, mi método de implementación de esta solución era realmente similar a esta respuesta, donde escribes la regla (como en la respuesta aceptada):

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
}

en un archivo img-cache.conf

y luego incluir ese archivo en su server {...} directiva.

Mi ejemplo de somesite.com en mi carpeta de sitios disponibles:

 #Image Caching
 include /etc/nginx/conf/img-cache.conf;

De esa manera, puede agregar el bloque de ubicación de almacenamiento en caché de imágenes a varios sitios que pueda estar ejecutando.


En segundo lugar, tengo una situación en la que mi / var / www / contiene dos carpetas que permito como public_html: seguro y de entrenamiento, por lo que tengo que hacer bloques de ubicación específicos en la directiva del servidor de mi sitio que selecciona estas carpetas.

Como tal, No tengo un directorio raíz global configurado.

Así que cuando haces tus bloques de ubicación de imagen, Es posible que no les proporcione un directorio raíz. De donde buscar las imagenes en!

Mi solución fue entonces:

location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ {
        root /var/www/;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public";
        try_files $uri 404;
}

location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
        root /var/www/secure;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public";
        try_files $uri 404;
}

12
2018-01-31 21:43



+1 por hacer esto reutilizable .conf. La carpeta apropiada en nginx/1.14.0 (Ubuntu) parece ser /etc/nginx/snippets/. - Jan Werkhoven


También puede establecer la caducidad al máximo. Aquí está la directiva que uso para css y js.

# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
    access_log off;
    expires max;
}

9
2018-06-10 08:41



Yo usaría la directiva de root solo en el bloque del servidor {}, cuando la uso en ubicaciones secundarias conlleva consecuencias inesperadas. No necesitas el descanso; tampoco, ya que no estás en un bloque if {} - Dave Cheney
Tienes razón. Se olvidó de limpiar esto. Editado para reflejar esto. - Jauder Ho


Todas las soluciones mencionadas negarán la posibilidad de tener diferentes alias para diferentes rutas. También por el hecho de tener todas sus diferentes caducidades de caché en un solo lugar, debe usar el mapa nginx de la siguiente manera.

...

# Expires mappings
map $sent_http_content_type $expires {
    default                    off;
    text/html                  epoch;
    text/css                   max;
    application/javascript     7d;
    ~image/                    max;
}

...

server {
   listen ...;

   expires $expires;
   location /assets/ {
      # It is now possible to serve some resources from different path
      alias /var/www/my_other_path/
   }

   # and have them all have same expirations
   location / {
       try_files $uri $uri/ /index.html;
   }
...
}

Off desactiva el almacenamiento en caché, epoch (para la época de Unix) los resultados en el recurso siempre se reparan, max establece la fecha en el valor máximo del navegador.

La ~ imagen / coincide con cualquier tipo de imagen.

Más acerca de los mapas de nginx en http://nginx.org/en/docs/http/ngx_http_map_module.html.


2
2018-01-04 19:58



Tenga en cuenta que si $sent_http_content_type es "text/css;charset=UTF-8" la expresión anterior fallará - pachanka


Si tienes un lugar que alberga todos tus archivos estáticos, algo como esto hará ...

 location /static {
            your/location/to/static/files/static;
            expires 30d;
            add_header Cache-Control "public";
    }

La respuesta aceptada hizo que nginx no encontrara ninguno de mis archivos estáticos. No estoy realmente seguro de por qué, pero esta es una alternativa simple.


0
2018-02-25 03:12





Dado que este es un hilo muy antiguo, encontré un tutorial actualizado y sorprendente.

Quizás quieras echarle un vistazo

Cómo implementar el almacenamiento en caché del navegador con el módulo de encabezado de Nginx en Ubuntu 16.04


-1
2018-05-04 04:18



En general, fruncimos el ceño al vincular los artículos y no incluir el contenido aquí también, ya que los enlaces tienen una tendencia a cambiar o caducar. - Unkwntech