nginxcaching问题与多个上游

我有一个奇怪的问题与两个相同的上游nginx代理+caching设置代理。 我有两个相同的上游服务器设置在主动/备份configuration。 caching工作正常的服务器之一,但只要我切换活动/备份configuration和重新加载nginx,我没有得到任何caching命中,并错误日志满足这些:

2017/06/15 10:14:21 [warn] 19048#19048: *2562 an upstream response is buffered to a temporary file /mnt/cache/temp/0000000504 while reading upstream, client: <CLIENT IP>, server: , request: "GET /secure/assets/file.ts?id=456 HTTP/1.1", upstream: "http://<UPSTREAM IP>:80/assets/file.ts", host: "server-host" 

现在,我找不到为什么nginx必须缓冲一个上游而不是另一个的响应,因为上游服务器有完全相同的文件,并且坐在同一个networking中。

现在,configuration的相关部分:

 http { tcp_nodelay on; proxy_cache_path /mnt/cache/cache keys_zone=one:20m inactive=24h loader_threshold=300 loader_files=200 max_size=180g; proxy_cache_key $uri; upstream master-cdn { server cdn1 backup max_fails=10 fail_timeout=60s; server cdn0 max_fails=10 fail_timeout=60s; keepalive 10; } proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_403 http_404; server { listen 80; if_modified_since off; add_header Cache-Control no-cache; add_header Pragma "no-cache"; root /var/www/html; location /assets { sendfile on; tcp_nopush on; internal; proxy_pass http://master-cdn; proxy_cache one; proxy_cache_min_uses 1; proxy_cache_lock on; proxy_cache_valid 200 24h; proxy_temp_path /mnt/cache/temp; } } 

注意:客户端正在碰到/secure url,它将被发送到应用服务器,然后使用X-Accel-Redirect头告诉nginx从内部位置提供静态文件。

整个设置工作得很好,但只有cdn0上游服务器。 只要我将backup语句移动到cdn0服务器并重新加载nginx,就会得到上游缓冲区和caching未命中。

有没有人有任何想法如何进一步debugging呢?

提前致谢。

我已经设法解决它。 在debugging日志的帮助下,我发现一个上游服务器是错误的(内容是静态的,并且不会过期),发送Cache-ControlExpires头文件与响应,然后混淆了nginxcaching(上游服务器不在我的控制之下,不幸的是)。

我已经将这两个语句添加到代理位置:

 proxy_ignore_headers Cache-Control; proxy_ignore_headers Expires; 

现在这两个上游服务器上的caching工作正常。