nginx 1.6 cache objects depend on proxy_cache_key,such as
nginx 1.6的缓存对象取决于proxy_cache_key的设置,比如
proxy_cache_key $uri$is_args$args;
nginx 1.7 cache objects depend on proxy_cache_key and VARY Header
nginx 1.7的缓存对象取决于proxy_cache_key 和 服务器返回的VARY头的内容
Changes with nginx 1.7.7 28 Oct 2014
*) Change: now nginx takes into account the "Vary" header line in a
backend response while caching.
If the upstream server reponsed this header: “Vary: Accept-Encoding”, cache object of the same url may save many copys depend on the different request headers: “Accept-Encoding”, in nginx 1.7 or above versions.
假如,你的upstream服务器返回了这样的header: “Vary: Accept-Encoding”,
相同一个url的缓存对象会基于请求header里边的”Accept-Encoding”的不同值 保存为许多份不同的副本,这个特性起于nginx1.7 版本
In this case, purge cache may failed, cause you don’t how many cache objects with “Accept-Encoding” headers
在这种情况下,清理缓存通常会失败,因为你不知道有多少的缓存对象有着哪些对应的”Accept-Encoding” headers
You have 2 choices to fix this problem:
你有两种选择来对付这个问题:
1. Rewrite the reuqest header “Accept-Encoding” in the front proxy serve
在最前端的代理服务器 重写请求的header: “Accept-Encoding”
set $compress "none";
if ($http_accept_encoding ~* "gzip|deflate|compress") {set $compress "gzip,deflate";}
proxy_set_header Accept-Encoding $compress;
2. Ignore the response header “Vary” in the middle cache server
或者在中间层的cache服务器 忽略掉服务器返回的header “Vary”
proxy_ignore_headers Vary;
在这里, “Vary: Accept-Encoding”, 只是一个非常常见的举例,实际上你的后端源站可能会返回特异的Vary Header.