我正在尝试设置一个具有两个条件的缓存反向代理;如果满足任何一个条件,它就不应该存储来自原点的文件:
- 部分内容请求
- 带有查询字符串的请求
按照下面的配置,我让 nginx 不存储部分内容请求。
但是,它仍然存储带有查询字符串的请求。我在这里遗漏了什么?
curl -r 1000-2000 http://edge.com/data/abcdef.dat
[确定。未存储文件。]
wget http://edge.com/data/abcdef.dat?query=string
[不确定。abcdef.dat 存储在边缘。]
位置 /数据/ { 设置 $originuri /origin$uri$is_args$args; 错误页面 404 = $originuri; } 位置 /原点/ { 代理密码 http://origin.com:1111; 代理存储/mnt1/edge/存储; 代理临时路径/mnt1/edge/tmp; proxy_set_header 如果范围 $http_if_range; proxy_set_header 范围 $http_range; proxy_no_cache $http_range $http_if_range $is_args; }
答案1
如果我没看错您的配置,当您将请求传递到原始位置进行代理时,您正在构建一个不包含 GET 查询字符串的 URI 字符串(即您正在展平$args
)。如果真是这样,那就可以解释为什么原始位置看起来$is_args
不真实。
这是我的直觉——我想查看请求日志以查看它是否正确。