Nginx servidores antigos arquivos estáticos após git commit

2

Estou usando o Nginx para fornecer arquivos estáticos (embora também seja usado como um proxy revers para meu RestapI expresso do NodeJS). O problema é quando eu envio um novo commit do git para o servidor, os usuários ainda receberão os arquivos antigos (última revisão). A solução agora é que o usuário limpe seu cache no navegador.

Qual poderia ser o motivo disso? Eu acho que isso é algum erro de configuração de cache do lado do servidor? Veja abaixo minha configuração do nginx (basic + include).

Como você pode ver abaixo, arquivos estáticos (.html, .js, .css) residem em / var / www / frontend

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

listen 80;

server_name **REMOVED_FOR_PRIVACY_REASONS**;

proxy_cache_valid 404 1m;

location / {
        root /var/www/frontend;
        index index.html
        try_files try_files $uri $uri/ =404;

        #proxy_cache backcache;
        #proxy_cache_bypass $http_cache_control;
        #add_header X-Proxy-Cache $upstream_cache_status;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    
por etaiso 05.11.2015 / 17:24

3 respostas

1

Eu também acho que isso tem a ver com o cache do lado do cliente.

Eu começaria a depurar isso com o firebug ou algo similar, carregue a página e verifique os cabeçalhos de armazenamento em cache (etag / last-modified / cache-control / expires).

Enquanto estamos nisso, achei muito bom este documento sobre caching HTTP:

link

Feito de um dos caras que faz o padrão HTTP, no entanto.

    
por 05.11.2015 / 19:30
1

Acho que isso não é um erro de configuração do cache do servidor. Os arquivos estáticos são armazenados em cache pelo navegador automaticamente. Você precisa de algum tipo de versionamento de arquivo estático para forçar o navegador a ler suas fontes modificadas:

<link src="/static/style.css?v=xxxx">
<script language="javascript" type="text/javascript" src="/js/app.js?v=xxxx"></script>
    
por 05.11.2015 / 17:44
0

Além das outras respostas, dê uma olhada no hashbuster , uma ferramenta escrita em python para superar problemas como esse. A descrição diz: "hashbuster é uma ferramenta para adicionar strings de consulta de impedimento de cache para URLs nos seus arquivos HTML.

Se você fizer muitas alterações em sites da Web ao vivo, os caches de navegador e de proxy provavelmente são a ruína de sua existência. Se você já teve que dizer a um cliente para limpar o cache de seu navegador para ver seu último código pressionado, então o hashbuster é para você. "

Você pode invocar a ferramenta, por exemplo, por meio de um gancho de pós-recebimento no seu servidor.

    
por 05.11.2015 / 21:40

Tags