3 votes

Impossible de faire fonctionner le cache de nginx

J'ai une configuration nginx très simple. Je n'arrive pas à faire fonctionner la mise en cache

http {
...
server_tokens                   off;
proxy_hide_header               X-Powered-By;
fastcgi_hide_header             X-Powered-By;
client_header_timeout           1024;
client_body_timeout             1024;
send_timeout                    9000;
proxy_read_timeout              4000;
connection_pool_size            256;
client_header_buffer_size       1k;
client_max_body_size            10m;
large_client_header_buffers     2 4k;
request_pool_size               4k;
proxy_buffers                   8 32k;
proxy_buffering                 off;
proxy_buffer_size               32k;
server_names_hash_bucket_size   64;
output_buffers                  3 16k;
postpone_output                 1460;
sendfile                        off;
tcp_nopush                      on;
tcp_nodelay                     on;
keepalive_timeout               30 100;
ignore_invalid_headers          off;
log_format custom '$host $uri $remote_addr [$time_local] $status $bytes_sent [$request]';

proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=melco:500m inactive=15m max_size=1000m;
proxy_temp_path /var/cache/nginx/temp;
...

server {
.....
location = /rss.php {
    access_log /var/log/nginx/rss.php.log custom;
    proxy_cache melco;
    proxy_cache_key "$host$request_uri$args";
    proxy_ignore_headers "Cache-Control" "Expires";
    proxy_cache_min_uses 1;
    proxy_cache_valid 200 302 304 5m;
    proxy_cache_use_stale http_502 http_503 http_504;
    proxy_hide_header Set-Cookie;

    proxy_pass  http://192.168.10.102;
    proxy_redirect     off;
    proxy_set_header    X-Forwarded-For       $remote_addr;
    proxy_set_header   Host             $host;
}
...

Les en-têtes sont :

# curl -I http://mysite.com/rss.php
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 10 Apr 2011 15:45:54 GMT
Content-Type: text/xml; charset=windows-1251
Connection: keep-alive
Keep-Alive: timeout=100
X-Powered-By: PHP/5.3.3-7+squeeze1
Pragma: no-cache
Generator: Nucleus CMS
Etag: "f263dc8eb016ffcb6d34b317b8d5a315"
Vary: Accept-Encoding

Je peux voir les demandes dans le fichier /var/log/nginx/rss.php.log mais le fichier /var/cache/nginx/cache est toujours vide. Les permissions sur /var/cache/nginx/cache sont définies sur www-data:www-data (utilisateur nginx:groupe). Une idée ? Comment voir également dans le journal des accès si la demande provient du cache ?

P.S. nginx ver :

# nginx -V
nginx version: nginx/0.7.67
TLS SNI support enabled
configure arguments: --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_dav_module --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-ipv6 --with-mail --with-mail_ssl_module --add-module=/tmp/buildd/nginx-0.7.67/modules/nginx-upstream-fair

9voto

Dmytro Leonenko Points 444

C'est à cause de

proxy_buffering                 off;

Doit être activé pour la mise en cache

1 votes

Où cela est-il écrit ?

0 votes

Près de la directive proxy_pass

0 votes

Voulez-vous dire "Lorsque la mise en mémoire tampon est désactivée, la réponse est transmise à un client de manière synchrone, immédiatement après sa réception. nginx n'essaiera pas de lire la réponse entière du serveur proxy. " ? Ou bien il y a autre chose de plus spécifique.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X