A configuração expira cabeçalhos para conteúdo estático veiculado do nginx

87

Estou usando o nginx para armazenar meu conteúdo estático. Existe uma maneira de definir os cabeçalhos de vencimento para cada arquivo que atenda a uma regra específica? Por exemplo, posso definir o cabeçalho de expiração para todos os arquivos que possuem uma extensão '.css'?

    
por Unkwntech 10.06.2009 / 07:19

7 respostas

113

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 cria um $ 1. Isso 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";
}
    
por 25.11.2011 / 21:07
21
server {
    ...

    location ~* \.css$ {
       expires 30d;
    }
    ...
}

A location diretiva

A diretiva expires

    
por 10.06.2009 / 07:23
12

Não tenho reputação suficiente para comentar por que a resposta aceita faria com que os arquivos não apareçam mais, mas descobri e gostaria de ajudar!

Versão resumida:

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, meu método de implementar essa solução foi muito 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 diretiva server {...} .

Meu exemplo de somesite.com na minha pasta disponível em sites:

 #Image Caching
 include /etc/nginx/conf/img-cache.conf;

Dessa forma, você pode adicionar o bloco de local de armazenamento de imagens em cache a vários sites em execução.

Em segundo lugar, eu tenho uma situação onde meu / var / www / contém duas pastas que eu permito como public_html - seguro 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 conjunto de diretórios raiz global .

Portanto, quando você bloqueia a sua imagem, você pode não estar fornecendo a ela 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;
}
    
por 31.01.2014 / 21:43
9

Você também pode definir o vencimento 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;
}
    
por 10.06.2009 / 08:41
2

Todas as soluções acima mencionadas negarão a possibilidade de ter diferentes aliases para diferentes caminhos. Também para ter todas as suas expirações de cache diferentes em um 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 época do unix) resulta no recurso sempre refetched, max define a data como valor máximo do navegador.

A imagem ~ / corresponde a qualquer tipo de imagem.

Mais sobre os mapas nginx no link .

    
por 04.01.2018 / 19:58
0

Se você tem um lugar que abriga todos os seus arquivos estáticos, algo assim irá acontecer ...

 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 certeza porque, mas esta é uma alternativa simples.

    
por 25.02.2013 / 03:12
-1

Como este é um tópico muito antigo, encontrei um tutorial incrível e atualizado.

Talvez você queira conferir

Como implementar o cache do navegador com o módulo de cabeçalho do Nginx no Ubuntu 16.04

    
por 04.05.2017 / 04:18