nginx não definir expira cabeçalhos sobre ativos Rails estáticos
-
22-08-2019 - |
Pergunta
Eu não consigo obter nginx para definido expirar cabeçalhos nos meus ativos estáticos em meu aplicativo Rails.
Meu aplicativo é implementado utilizando Phusion Passenger & nginx.
Segue-se a respectiva secção do meu arquivo de configuração nginx
server {
listen 80;
server_name my.domain.tld;
root /home/deploy/my.domain.tld/current/public;
passenger_enabled on;
access_log off;
location ~* \.(ico|css|js|gif|jp?g|png)\?[0-9]+$ {
expires max;
break;
}
if (-f $document_root/system/maintenance.html) {
rewrite ^(.*)$ /system/maintenance.html break;
}
}
Eu não sei por que não o seu ajuste expira cabeçalhos nos meus ativos estáticos (por exemplo /images/foo.png?123456)
Eu não tenho certeza se ele tem algo a ver com passageiro ou se o meu regexp localização, apenas is not captura-lo
Solução 2
Então eu acabei de encontrar a solução. Meu regexp foi um pouco fora, como eu não estava levando em conta a possibilidade de que o? Timestamp não existia.
Esta regexp funcionou para mim.
location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {
Outras dicas
Apenas queria salientar que fazer o opcional timestamp é uma má idéia -. Se não for incluída, em seguida, definindo expires max
está errado, pois não haveria nenhuma maneira de refrescar o arquivo
Além disso, a directiva location
em Nginx não pode ver a string de consulta, então a solução postada aqui não combina com o 'opcional' timestamp.
A solução adequada (ou seja, aquele que envia o máximo única expira quando o arquivo foi solicitado com um timestamp) seria:
location ~* \.(js|css|png|jpg)$ {
if ($query_string ~ "^[0-9]+$") {
expires max;
break;
}
}
Se o timestamp não for especificado, então você confiar em Last-Modified
e ETag
, que são manipulados automaticamente por Nginx.
Talvez isto ajude:
location ~* ^.*\.(ico|css|js|gif|jp?g|png)\?[0-9]+$ {
Além disso, leia como Nginx avalia localização . Tem certeza de que não têm qualquer outra location
corda em seu arquivo de configuração que corresponda aos seus recursos estáticos antes de seu location
regexp faz?
BTW, considere o uso try_files vez de if (-f $document_root/...)
.
não há necessidade de usar "quebrar" directiva, mas access_log off; será útil:
location ~* \.(png|gif|jpg|jpeg|css|js|swf|ico)(\?[0-9]+)?$ {
access_log off;
expires max;
add_header Cache-Control public;
}
Você pode ver arquivo de configuração completa no github: https://gist.github.com/711913