Configuração Nginx para armazenar arquivos estáticos em cache

Configuração Nginx para armazenar arquivos estáticos em cache

Tenho alguns problemas ao configurar o Nginx para servir corretamente um aplicativo AngularJS. O servidor está configurado da seguinte forma:

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

o caminho para o aplicativo é o seguinte:

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

e arquivos estáticos estão dentro do seguinte:

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

Agora eu gostaria de definir o cache como "no-cache" para todos os arquivos html na página de destino e no aplicativo, mas definir o cache para 60 dias para todos os arquivos js, css e imagens.

Esta é a configuração atual do meu 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";
  }
}

Agora o problema é que a diretiva de localização:

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

nunca é executado, portanto o cache é definido como no-cache conforme definido na diretiva /app.

Qualquer ideia?

obrigado

Responder1

Uma citação da documentação do nginx:

Se o local do prefixo correspondente mais longo tiver o modificador “^~”, as expressões regulares não serão verificadas.

Então, o problema aqui é a sua location ^~ /appdefinição. O ^modificador faz com que o nginx ignore a expressão regular das imagens.

Você deve usar location /appem vez disso. Você não precisa de correspondência de expressões regulares neste local, a correspondência simples de prefixo é suficiente.

Responder2

Acho que o problema é "~*", tente apenas com "~". Exemplo:

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

informação relacionada