Proxy_cache not working anymore in 1.8

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é

Today Jun 1, 2015 at 13:28 Rene Moser wrote:

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.

Content-Length: 743
http://nginx.org/r/proxy_cache_valid
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).


WNGS-RIPE

Hi

On 01.06.2015 13:51, Oleksandr V. Typlyns’kyi wrote:

Vary: *
http://nginx.org/r/proxy_cache_valid
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).

I can confirm this was the “issue”, thank you for this helpful and fast
response!

Yours
Ren

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs