Configuración de Nginx para almacenar en caché archivos estáticos

Configuración de Nginx para almacenar en caché archivos estáticos

Tengo algún problema al configurar Nginx para servir correctamente una aplicación AngularJS. El servidor está configurado de la siguiente manera:

www.example.com we have the landing page of the application
www.example.com/app we have the application itself

la ruta a la aplicación es la siguiente:

/usr/share/nginx/html/example.com/app/

y los archivos estáticos están dentro de lo siguiente:

/usr/share/nginx/html/example.com/app/public/app/assets

Ahora me gustaría configurar el almacenamiento en caché en "sin caché" para todos los archivos html tanto en la página de inicio como en la aplicación, pero configurar el caché en 60 días para todos los archivos js, css e imágenes.

Esta es la configuración actual de mi servidor nginx:

server {
listen 80;

index index.html;

server_name example.com www.example.com;

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

location ^~ /app {
    alias /usr/share/nginx/html/example.com/app/public/;
    expires -1;
    add_header Pragma "no-cache";
}

location / {
    root /usr/share/nginx/html/example.com;
    expires -1;
    add_header Pragma "no-cache";
    add_header Cache-Control "no-store, no-cache, must-revalidate,  post-check=0, pre-check=0";
  }
}

Ahora el problema es que la directiva de ubicación:

location ~* \.(?:ico|css|js|gif|jpe?g|png)$

nunca se ejecuta, por lo que el caché se establece como sin caché como se define en la directiva /app.

¿Alguna idea?

gracias

Respuesta1

Una cita de la documentación de nginx:

Si la ubicación del prefijo coincidente más largo tiene el modificador “^~”, entonces las expresiones regulares no se verifican.

Entonces, el problema aquí es tu location ^~ /appdefinición. El ^modificador hace que nginx ignore la expresión regular de las imágenes.

Deberías usar location /appen su lugar. No necesita una coincidencia de expresiones regulares en este lugar, una simple coincidencia de prefijos es suficiente.

Respuesta2

Supongo que el problema es "~*", prueba solo con "~". Ejemplo:

location ~ \.(?:ico|css|js|gif|jpe?g|png)$

información relacionada