Os arquivos CSS e JS não estão sendo atualizados, supostamente por causa do cache do Nginx

1

Eu tenho meu aplicativo da web trabalhando com o AppCache e gostaria que modificasse meus arquivos html / css / js e atualizasse meu Manifesto de cache, que quando o usuário acessasse meu aplicativo da web, eles tivessem uma versão atualizada do esses arquivos. Se eu alterar um arquivo HTML, ele funcionará perfeitamente, mas quando eu altero os arquivos CSS e JS, a versão antiga ainda está sendo usada.

Eu verifiquei tudo e acho que está relacionado à configuração do nginx. Eu tenho um arquivo cache.conf que contém o seguinte:

gzip on;
gzip_types text/css application/x-javascript text/x-component text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location ~ \.(css|js|htc)$ {
expires 31536000s;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public, must-revalidate, proxy-revalidate";
}
location ~ \.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml)$ {
expires 3600s;
add_header Pragma "public";
add_header Cache-Control "max-age=3600, public, must-revalidate, proxy-revalidate";
}

E no default.conf eu tenho meus locais. Eu gostaria de ter esse cache trabalhando em todos os locais, exceto um, como eu poderia configurar isso? Eu tentei o seguinte e não está funcionando:

location /dir1/dir2/ {
  root /var/www/dir1;
  add_header Pragma "no-cache";
  add_header Cache-Control "private";
  expires off;
}

Obrigado

Atualização:

Meu cache.conf agora está assim:

location ^~ /desk/ {
  add_header Pragma "no-cache";
  add_header Cache-Control "private";
  expires off;
}

location ^~ /dev/desk/ {
  add_header Pragma "no-cache";
  add_header Cache-Control "private";
  expires off;
}

gzip on;
gzip_types text/css application/x-javascript text/x-component text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location ~ \.(css|js|htc)$ {
expires 31536000s;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public, must-revalidate, proxy-revalidate";
}
    
por Alberto Elias 12.11.2012 / 17:25

1 resposta

0

As localizações no nginx definem configurações exclusivas, isto é, com dois locais

location /dir1/dir2/ {
    # configuration A
}

location ~ \.(css|js|htc)$ {
    # configuration B
}

apenas uma configuração será usada para uma solicitação. Com os locais acima (como na sua configuração), para uma solicitação para /dir1/dir2/file.css , será selecionado location ~ \.(css|js|htc)$ de acordo com regras de seleção de local .

Se você quiser que o nginx não procure por locais dados por expressões regulares se a solicitação começar com /dir1/dir2/ , use ^~ modifier:

location ^~ /dir1/dir2/ {
    # configuration A
}

location ~ \.(css|js|htc)$ {
    # configuration B
}

Dessa forma, o location ^~ /dir1/dir2/ local será usado para uma solicitação /dir1/dir2/file.css .

Como alternativa, você pode isolar seus locais de expressão regular em outro local de prefixo, por exemplo, location / , assim:

location / {
    # configuration for normal files under /

    location ~ \.(css|js|htc)$ {
        # configuration for css/js/htc files under /
    }
}

location /dir1/dir2/ {
    # configuration for all files under /dir1/dir2/
}

Consulte o link para obter detalhes adicionais. O artigo Como o nginx processa uma solicitação também pode ser útil.

    
por 12.11.2012 / 17:53

Tags