Página em cache do Nginx retornando dados binários (arquivo .gz) de vez em quando. Funciona quando a pasta em cache é excluída

2

Eu tenho um servidor nginx rodando como proxy. Uma página é configurada para ser armazenada em cache e ser exibida como compactada.
Mas, de vez em quando, ele serve a página como arquivo .gz , que mostra um arquivo para ser baixado. Um curl –I hit retorna dados binários.

curl -I www.site.com/cs

Mas quando apaguei a pasta cache tudo começa a funcionar bem.

sudo rm -r /tmp/nginx/cscache/

O que poderia estar errado ? Alguém pode ajudar?

Esta é a configuração

    location = /cs {
    proxy_pass http://localhost:82;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_ignore_headers Set-Cookie; 
    proxy_ignore_headers Cache-Control; 
    proxy_ignore_headers Expires; 
    proxy_ignore_headers X-Accel-Expires; 
    add_header X-Cache-Status $upstream_cache_status;
    proxy_cache             cscache;
    proxy_cache_bypass       $http_cs;
    proxy_cache_key         $request_uri;
    proxy_cache_valid       200 302 1d;
    proxy_cache_valid       404      1m;
    proxy_cache_use_stale   error timeout invalid_header;
    }

E o resultado durante uma chamada curl -I válida.

[c@c ~]$ curl -I www.site.com/cs
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 28 Dec 2011 14:49:39 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
Vary: Cookie,Accept-Encoding
X-Mod-Pagespeed: 0.9.17.7-716
Cache-Control: max-age=0, no-cache, no-store
X-Cache-Status: MISS
    
por Quintin Par 28.12.2011 / 16:07

2 respostas

0

Esse comportamento é visível com um navegador da Web ou apenas curl? Porque eu não acho que o curl irá esvaziar por padrão, portanto você está obtendo dados binários. Tente o seguinte:

curl -I -H 'Accept-Encoding: gzip,deflate' www.site.com/cs
    
por 29.12.2011 / 15:01
0

Eu acredito que os ativos em cache estão sendo corrompidos, e é por isso que os pedidos que ignoram o cache (X-Cache-Status: MISS) estão bem. Respostas de solicitações que ignoram o cache ainda podem ser armazenadas em cache. Eu não sei quais condições você está usando para ignorar o cache, mas quando eu encontrei esse problema, tinha algo a ver com respostas para usuários autenticados sendo armazenados em cache e, em seguida, esse cache sendo servido para usuários não autenticados.

Se você adicionar uma diretiva proxy_no_cache $http_cs , suspeito que isso irá resolvê-la ... mas é claro que não armazenar em cache solicitações ignoradas pode ser um comportamento indesejado.

    
por 11.01.2012 / 18:48

Tags