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