Estou usando o nginx para servidor meu conteúdo estático, existe uma maneira de definir os cabeçalhos de expiração para cada arquivo que atende a uma regra específica? Por exemplo, posso definir o cabeçalho expires para todos os arquivos que tenham a extensão '.css'?
Eu 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 criará um $1. Ajuda a reduzir a carga desnecessária.
A
location
diretivaA
expires
diretivaNão tenho reputação suficiente para comentar por que a resposta aceita faria com que os arquivos não aparecessem mais, 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:
Em primeiro lugar, meu método de implementação desta solução foi muito semelhante a this answer , onde você escreve a regra (como na resposta aceita):
em um arquivo img-cache.conf
e, em seguida, inclua esse arquivo em sua
server {...}
diretiva.Meu exemplo de somesite.com na minha pasta sites-available:
Dessa forma, você pode adicionar o bloco de localização de cache de imagem a vários sites que possa estar executando.
Em segundo lugar, eu tenho uma situação em que meu /var/www/ contém duas pastas que eu permito como public_html - segura e treinamento, então eu tenho que fazer blocos de localização específicos na diretiva do servidor do meu site, destacando essas pastas.
Como tal, não tenho um diretório raiz global definido .
Então, quando você faz seus blocos de localização de imagem, você pode não estar fornecendo a eles um diretório raiz para procurar as imagens!
Minha solução foi então:
Você também pode definir as expirações para o máximo. Aqui está a diretiva que eu uso para css e js.
Todas as soluções mencionadas negarão a possibilidade de ter diferentes aliases para diferentes caminhos. Além disso, para ter todas as expirações de cache diferentes em um só lugar, você deve usar o mapa nginx da seguinte maneira.
...
Off
desabilita o cache,epoch
(para unix epoch) resulta em recurso sempre sendo buscado novamente,max
define a data para o valor máximo do navegador.O ~image/ corresponde a qualquer tipo de imagem.
Mais sobre mapas nginx em http://nginx.org/en/docs/http/ngx_http_map_module.html .
Se você tiver um lugar que abriga todos os seus arquivos estáticos, algo assim funcionará ...
A resposta aceita fez com que o nginx não encontrasse nenhum dos meus arquivos estáticos. Não tenho certeza do porquê, mas esta é uma alternativa simples.
A maioria das respostas nesta página são extremamente desatualizadas e/ou complicadas...
Para começar, o
Expires
cabeçalho não é uma boa opção hoje em dia, nem oPragma
cabeçalho... idealmente, você deve desabilitar ambos os cabeçalhos em sua configuração do Nginx .É muito mais simples definir um único
Cache-Control
cabeçalho no bloco de localização de ativos estáticos:Lembre-se que para o Nginx, se você usar a
expires
diretiva comoexpires max
esta NÃO é apenas definir umExpires
cabeçalho HTTP, também está configurando umCache-Control
cabeçalho, então pode ficar muito confuso rapidamente.O TLDR apenas usa
Cache-Control
em seus arquivos estáticos para que CDNs como Cloudflare possam armazená-los em cache na borda e/ou navegadores podem armazená-los por um tempo.E eu recomendo NÃO usar nenhum cabeçalho de cache para sua página/conteúdo HTML em sites dinâmicos como o WordPress, porque isso só levará a conflitos e confusão
etag
... 't e acho que isso faz mais sentido ao usar caches de saída agressivos como Varnish ou LS Cache da Litespeed.As abordagens acima são o que usamos no SlickStack e funciona de maneira fantástica para desempenho e estabilidade, enquanto protege contra, por exemplo, plugins (ou pessoas) do WordPress que mexem com suas configurações.
Etapa 1: Configurando o Cache-Control e os cabeçalhos de expiração:
Adicione o seguinte acima do
server
bloco:E esta linha dentro do
server
bloco.expires $expires;
Fonte: Digital Ocean