Respostas:
Prefiro fazer um cabeçalho de cache mais completo, além de mais algumas extensões de arquivo. O '?' prefixo é uma marca de 'não captura', o nginx não cria um $ 1. Ajuda a reduzir a carga desnecessária.
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
root
conjunto; nesse caso, você deve adicionar as diretivas a esse bloco. (Eu sei que isto é 2y tarde, mas para os cidadãos futuros)
Não tenho reputação suficiente para comentar por que a resposta aceita faria com que os arquivos não fossem mais exibidos, mas descobri e gostaria de ajudar!
Versão curta:
Certifique-se de ter um diretório raiz especificado para o seu bloco de localização nas imagens, se você não tiver um conjunto global!
Versão longa abaixo:
Primeiro de tudo, meu método de implementar esta solução foi realmente semelhante a esta resposta , onde você escreve a regra (como na resposta aceita):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
em um arquivo img-cache.conf
e inclua esse arquivo na sua server {...}
diretiva.
Meu exemplo de somesite.com na minha pasta de sites disponíveis:
#Image Caching
include /etc/nginx/conf/img-cache.conf;
Dessa forma, você pode adicionar o bloco de local de armazenamento em cache da imagem a vários sites em execução.
Em segundo lugar, tenho uma situação em que meu / var / www / contém duas pastas que eu permito como public_html - seguro e treinamento, por isso tenho que criar blocos de localização específicos na diretiva de servidor do meu site destacando essas pastas.
Como tal, não tenho um diretório raiz global definido .
Portanto, quando você cria os blocos de localização da imagem, pode não estar fornecendo a eles um diretório raiz a partir do qual procurar as imagens!
Minha solução foi então:
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;
}
.conf
. A pasta apropriada em nginx/1.14.0 (Ubuntu)
parece ser /etc/nginx/snippets/
.
Você também pode definir o prazo de validade para o máximo. Aqui está a diretiva que eu uso para css e js.
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
Todas as soluções acima mencionadas negarão a possibilidade de ter aliases diferentes para caminhos diferentes. Também para ter todas as suas diferentes expirações de cache em um só lugar, você deve usar o mapa nginx da seguinte maneira.
...
# 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
desativa o armazenamento em cache, epoch
(para a época do unix) resulta no recurso sempre sendo recuperado, max
define a data para o valor máximo do navegador.
A imagem ~ corresponde a qualquer tipo de imagem.
Mais sobre os mapas do nginx em http://nginx.org/en/docs/http/ngx_http_map_module.html .
$sent_http_content_type
for "text/css;charset=UTF-8"
a expressão acima falhará.
Se você tiver um local que abriga todos os seus arquivos estáticos, algo como isso servirá ...
location /static {
your/location/to/static/files/static;
expires 30d;
add_header Cache-Control "public";
}
A resposta aceita fez com que o nginx não encontrasse nenhum dos meus arquivos estáticos. Não tenho muita certeza do porquê, mas essa é uma alternativa simples.
/static
pasta (o que você definir no local) no final do alias (logo depois .../files
no exemplo).
Como esse é um tópico muito antigo, encontrei um tutorial incrível atualizado.
Talvez você queira dar uma olhada
Como implementar o cache do navegador com o módulo de cabeçalho do Nginx no Ubuntu 16.04