proxy_cache not working anymore in 1.8
Rene Moser
mail at renemoser.net
Mon Jun 1 11:28:42 UTC 2015
Hi
We use nginx as proxy_cache and identified a different somehow weird
behaviour compared to 1.6.:
In some situations we get a MISS or EXPIRED in 1.8, where with the same
config, same resource and same origin, we got a HIT in 1.6.
The weird thing is, it does never change to a HIT even after several
requests to the same resource! We always get MISSED or EXPIRED. We do
not use proxy_cache_min_uses.
Below I show you some configs, nothing really fancy. Does anyone use 1.8
for proxy_cache?
1.6: rpm spec and sources:
https://github.com/swisstxt/rpm-pcache/commit/cabe5f83b8c02ae8ce74543f669c9b0c0fc41f03
1.8: rpm spec and sources:
https://github.com/swisstxt/rpm-pcache/commit/da336fd143e21500e445df4a5ece0af7f8a9448b
Response from ORIGIN:
Cache-Control: public, max-age=49
Content-Type: application/json; charset=utf-8
Content-MD5: O+EP2TJJZQZr61/mhkVqdA==
Expires: Mon, 01 Jun 2015 11:09:05 GMT
Last-Modified: Mon, 01 Jun 2015 11:08:05 GMT
Vary: *
access-control-allow-origin: *
Date: Mon, 01 Jun 2015 11:08:15 GMT
Content-Length: 743
nginx respone in 1.6.:
Server: nginx
Date: Mon, 01 Jun 2015 11:20:59 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 728
Connection: keep-alive
Cache-Control: public, max-age=60
Content-MD5: aMGk4M7K6qzjnOIvVfy6fg==
Expires: Mon, 01 Jun 2015 11:21:48 GMT
Last-Modified: Mon, 01 Jun 2015 11:20:48 GMT
Vary: *
access-control-allow-origin: *
X-Node: cache.example.com
X-Cached: HIT
200 OK
nginx response in 1.8.:
Server: nginx
Date: Mon, 01 Jun 2015 11:23:41 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 728
Connection: keep-alive
Cache-Control: public, max-age=56
Content-MD5: aMGk4M7K6qzjnOIvVfy6fg==
Expires: Mon, 01 Jun 2015 11:24:38 GMT
Last-Modified: Mon, 01 Jun 2015 11:23:38 GMT
Vary: *
access-control-allow-origin: *
X-Node: cache.example.com
X-Cached: MISS
200 OK
2nd nginx response in 1.8.:
Server: nginx
Date: Mon, 01 Jun 2015 11:24:53 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 728
Connection: keep-alive
Cache-Control: public, max-age=57
Content-MD5: aMGk4M7K6qzjnOIvVfy6fg==
Expires: Mon, 01 Jun 2015 11:25:50 GMT
Last-Modified: Mon, 01 Jun 2015 11:24:50 GMT
Vary: *
access-control-allow-origin: *
X-Node: cache.example.com
X-Cached: MISS
200 OK
#file nginx.conf:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
add_header X-Node $hostname;
add_header X-Cached $upstream_cache_status;
# changed to fake IPs
resolver 1.2.3.4 1.2.3.5;
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
server_tokens off;
sendfile on;
keepalive_timeout 10s;
tcp_nopush on;
tcp_nodelay on;
proxy_temp_path /srv/www/temp;
proxy_connect_timeout 10s;
proxy_send_timeout 20s;
proxy_read_timeout 20s;
send_timeout 30s;
charset utf-8;
charset_types application/javascript text/css application/atom+xml;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
...
}
#file foobar.example.com.conf:
upstream foobar-origins {
server lb.foobar.example.com;
}
proxy_cache_path /srv/www/cache/foobar.example.com levels=1:2
keys_zone=foobar:10m inactive=2d max_size=1g;
server {
listen 1.1.104.140:80;
server_name foobar.example.com;
access_log /srv/www/log/foobar.example.com/access.log combined;
error_log /srv/www/log/foobar.example.com/error.log;
access_log /srv/www/log/foobar.example.com/pcache.log pcache_json
buffer=16k;
set $volume_key "foobar";
access_log /srv/www/log/global_pcache_volume.log volume-key;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_key "$scheme$host$request_uri";
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
location / {
proxy_cache foobar;
proxy_cache_valid 200 206 301 302 5m;
proxy_cache_valid any 10s;
proxy_cache_lock on;
proxy_cache_use_stale error timeout invalid_header updating http_500
http_502 http_503 http_504 http_403 http_404;
proxy_pass http://foobar-origins;
}
...
}
Any hints?
Yours
René
More information about the nginx
mailing list