
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 ^~ /app
definição. O ^
modificador faz com que o nginx ignore a expressão regular das imagens.
Você deve usar location /app
em 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)$