AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 23157
Accepted
Unkwntech
Unkwntech
Asked: 2009-06-10 23:19:43 +0800 CST2009-06-10 23:19:43 +0800 CST 2009-06-10 23:19:43 +0800 CST

Configurando o cabeçalho HTTP "Expires" para conteúdo estático servido do Nginx?

  • 772

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'?

nginx http-headers
  • 8 8 respostas
  • 180065 Views

8 respostas

  • Voted
  1. Best Answer
    J. M. Becker
    2011-11-26T13:07:20+08:002011-11-26T13:07:20+08:00

    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.

    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
        expires 30d;
        add_header Pragma public;
        add_header Cache-Control "public";
    }
    
    • 140
  2. Dave Cheney
    2009-06-10T23:23:53+08:002009-06-10T23:23:53+08:00
    server {
        ...
    
        location ~* \.css$ {
           expires 30d;
        }
        ...
    }
    

    A locationdiretiva

    A expiresdiretiva

    • 23
  3. amurrell
    2014-02-01T13:43:39+08:002014-02-01T13:43:39+08:00

    Nã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):

    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, em seguida, inclua esse arquivo em sua server {...}diretiva.

    Meu exemplo de somesite.com na minha pasta sites-available:

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

    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:

    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;
    }
    
    • 22
  4. Jauder Ho
    2009-06-11T00:41:46+08:002009-06-11T00:41:46+08:00

    Você também pode definir as expirações 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;
    }
    
    • 9
  5. Pantura
    2018-01-05T11:58:33+08:002018-01-05T11:58:33+08:00

    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.

    ...

    # 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;
       }
    ...
    }
    

    Offdesabilita o cache, epoch(para unix epoch) resulta em recurso sempre sendo buscado novamente, maxdefine 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 .

    • 8
  6. user161646
    2013-02-25T19:12:31+08:002013-02-25T19:12:31+08:00

    Se você tiver um lugar que abriga todos os seus arquivos estáticos, algo assim funcionará ...

     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 do porquê, mas esta é uma alternativa simples.

    • 2
  7. Jesse Nickles
    2022-09-02T01:07:19+08:002022-09-02T01:07:19+08:00

    A maioria das respostas nesta página são extremamente desatualizadas e/ou complicadas...

    Para começar, o Expirescabeçalho não é uma boa opção hoje em dia, nem o Pragmacabeçalho... idealmente, você deve desabilitar ambos os cabeçalhos em sua configuração do Nginx .

    more_clear_headers "Pragma Expires";
    

    É muito mais simples definir um único Cache-Controlcabeçalho no bloco de localização de ativos estáticos:

    location ~* \.(atom|bmp|bz2|css|doc|docx|eot|gif|gz|ico|jpeg|jpg|js|mid|midi|mp4|ogg|ogv|otf|png|ppt|rar|rss|rtf|svg|svgz|tar|tgz|ttc|ttf|wav|webp|woff|woff2|xls|zip)$ {
        add_header Cache-Control "public, max-age=691200";
    }
    

    Lembre-se que para o Nginx, se você usar a expiresdiretiva como expires maxesta NÃO é apenas definir um Expirescabeçalho HTTP, também está configurando um Cache-Controlcabeçalho, então pode ficar muito confuso rapidamente.

    O TLDR apenas usa Cache-Controlem 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.

    • 0
  8. Mo Kawsara
    2017-05-04T20:18:15+08:002017-05-04T20:18:15+08:00

    Etapa 1: Configurando o Cache-Control e os cabeçalhos de expiração:

    sudo nano /etc/nginx/sites-available/default
    

    Adicione o seguinte acima do serverbloco:

    # Expires map
    map $sent_http_content_type $expires {
        default                    off;
        text/html                  epoch;
        text/css                   max;
        application/javascript     max;
        ~image/                    max;
    }
    

    E esta linha dentro do serverbloco.expires $expires;

    sudo systemctl restart nginx
    

    Fonte: Digital Ocean

    • -1

relate perguntas

  • nginx HTTPS servindo com a mesma configuração que HTTP

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Resolver o nome do host do endereço IP

    • 8 respostas
  • Marko Smith

    Como posso classificar a saída du -h por tamanho

    • 30 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    Qual é o utilitário de linha de comando no Windows para fazer uma pesquisa reversa de DNS?

    • 14 respostas
  • Marko Smith

    Como verificar se uma porta está bloqueada em uma máquina Windows?

    • 4 respostas
  • Marko Smith

    Qual porta devo abrir para permitir a área de trabalho remota?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    MikeN No Nginx, como posso reescrever todas as solicitações http para https mantendo o subdomínio? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 Qual é a diferença entre colchetes duplos e simples no bash? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch Como altero a senha da minha chave privada? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt Como funciona a sub-rede IPv4? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve