Nginx não armazena em cache páginas imediatamente

1

Estou utilizando o módulo proxy_cache do Nginx para armazenar em cache, mas notei que a página não é armazenada em cache imediatamente. O conteúdo é muito dinâmico e cada carregamento de página produz um layout diferente, estou tentando armazenar em cache o layout por uma hora.

O Nginx parece apenas armazenar em cache a página após acertá-la com várias solicitações rapidamente . Aqui está minha configuração.

proxy_cache_path  /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=1000m; #caching
proxy_temp_path /var/tmp; #caching

proxy_cache_valid 404 500 1m;
proxy_cache_valid 200 60m;
proxy_cache_min_uses 1;

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

upstream staging {
  server 127.0.0.1:1337;
  server 127.0.0.1:7331;
}

server {
  listen 0.0.0.0:80;
  server_name dev.example.com;
  access_log /var/log/nginx/dev.example.log;
  error_log  /var/log/nginx/dev.example.error.log debug;   log_subrequest on;

  location ~ ^/(images/|scripts/|styles/|robots.txt|humans.txt|favicon.ico) { #caching
    root /home/example/app/website/public;
    access_log off;
    expires max;
  }

  location /ssi { #Our serverside includes
    proxy_pass http://staging;
  }

  location / {
    ssi on;

    #auth_basic "Restricted";
    #auth_basic_user_file /etc/nginx/.htpasswd;

    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;

    proxy_cache one; #caching
    proxy_cache_key sfs$request_uri$scheme; #caching

    proxy_http_version 1.1;
    proxy_pass http://staging/; #points to the upstream staging
  }
}

server {
  listen 0.0.0.0:80;
  server_name static.example.com;

  location ~ ^/(images/|scripts/|styles/|robots.txt|humans.txt|favicon.ico) { #caching
    add_header Access-Control-Allow-Origin *.example.com;
    root /home/example/app/website/public;
    access_log off;
    expires max;
  }

  location / {
    return 404;
  }

}
    
por George 12.03.2013 / 18:29

1 resposta

2

O nginx decide se as respostas upstream podem ser armazenadas em cache com base em determinados cabeçalhos. Da documentação :

The following response headers flag a response as uncacheable unless they are ignored:

  • Set-Cookie
  • Cache-Control containing "no-cache", "no-store", "private", or a "max-age" with a non-numeric or 0 value
  • Expires with a time in the past
  • X-Accel-Expires: 0

Verifique quais cabeçalhos seu upstream está enviando para o nginx e verifique se eles permitem o armazenamento em cache.

    
por 12.03.2013 / 19:19