Minhas páginas não estão sendo atendidas do cache.Mas o nginx está, na verdade, armazenando em cache os arquivos

1

Eu configurei um servidor nginx no Ubuntu como um servidor de cache de proxy reverso. Meu código de aplicativo reside na pasta / var / www / myapp.

a seguir é a configuração que eu dei em

server {
        listen   80; ## listen for ipv4; this line is default and implied
        root /var/www/;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {

            proxy_pass         http://127.0.0.1:8080/;
            rewrite ^([^.]*[^/])$ $1/ permanent;
            add_header X-Cache-Status $upstream_cache_status;
        }

        location /doc/ {
                alias /usr/share/doc/;
                autoindex on;
                allow 127.0.0.1;
                deny all;
        }
    }

é o conteúdo do meu arquivo nginx / sites-available / default

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
        worker_connections 1024 ;
        # multi_accept on;
}

http {

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

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

         gzip_vary on;
          gzip_proxied any;
         gzip_comp_level 6;
         gzip_buffers 16 8k;
         gzip_http_version 1.1;
         gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;


        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

        proxy_cache_path  /var/www/cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
        proxy_temp_path /var/www/cache/tmp;
        proxy_cache my-cache;
        proxy_cache_valid  200 302  60m;
        proxy_cache_valid  404      1m;

}

é o conteúdo do meu arquivo nginx / nginx.conf

O Nginx está armazenando os arquivos em cache no diretório / var / www / cache

Mas quando eu verifico a resposta do cabeçalho da minha página link no firefox usando o firebug, ele mostra

Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection  keep-alive
Content-Encoding    gzip
Content-Length  3817
Content-Type    text/html; charset=utf-8
Date    Fri, 29 Mar 2013 10:19:23 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Pragma  no-cache
Server  nginx/1.1.19
Vary    Accept-Encoding
X-Cache-Status  MISS
X-Powered-By    PHP/5.3.10-1ubuntu3.6

X-Cache-Status é MISS. Por que não é servido do cache?

    
por zamil 29.03.2013 / 11:32

2 respostas

5

Editar: perdi isso na primeira vez, mas seu aplicativo está enviando este cabeçalho Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0 , o que impedirá o armazenamento em cache. Você deve modificar seu aplicativo para não enviar este cabeçalho, se não for necessário.

Eu tentei suas configurações e, na primeira solicitação, recebi um MISS , o que é esperado, pois ainda não está no cache. Em solicitações subsequentes, recebo um HIT .

Estou usando a versão 1.2.6, enquanto você está usando o 1.1.9. Nas notas de lançamento , parece haver algumas correções para o cache entre sua versão e a minha. Talvez sua configuração esteja bem, mas sua versão está cheia de bugs?

Você também pode tentar fazer login para ver o que o nginx está dizendo no lado do servidor:

log_format cache_status '[$time_local] "$request"  $upstream_cache_status';
access_log logs/cache.log cache_status;

Além das outras $upstream_ variables , você pode obter mais informações sobre o que está errado no logging .

    
por 01.04.2013 / 09:21
3

De: link

Syntax: proxy_cache_valid [code ...] time;

...

Parameters of caching can also be set directly in the response header. This has higher priority than setting of caching time using the directive.

  • The “X-Accel-Expires” header field sets caching time of a response in seconds. The zero value disables caching for a response. If the value starts with the @ prefix, it sets an absolute time in seconds since Epoch, up to which the response may be cached.
  • If the header does not include the “X-Accel-Expires” field, parameters of caching may be set in the header fields “Expires” or
    “Cache-Control”.
  • If the header includes the “Set-Cookie” field, such a response will not be cached.
  • If the header includes the “Vary” field with the special value “*”, such a response will not be cached (1.7.7). If the header includes
    the “Vary” field with another value, such a response will be cached
    taking into account the corresponding request header fields (1.7.7).

Processing of one or more of these response header fields can be disabled using the proxy_ignore_headers directive.

A maioria dos aplicativos da web definiu Set-Cookie header, portanto, uma resposta não será armazenada em cache. Para corrigir isso, use esta diretiva:

proxy_ignore_headers Set-Cookie;
    
por 17.11.2015 / 09:36

Tags