使用 nginx 我有
server {
listen 1.2.3.4:80
proxy_cache_valid 200 302 5m;
location / {
try_files $uri @upstream;
root $root;
}
}
当我访问时,http://example.com/foobar
它会生成一个依赖于访问者的重定向http://example.com/foobar?filter_distance=50&...
,因此我不想缓存此重定向。当查询字符串为空时,我需要绕过缓存。我有点迷茫,因为location /foobar
会匹配两者。
答案1
我补充道
map $request_uri $nocache {
/foobar 1;
}
到 http 部分并
proxy_cache_bypass $nocache;
proxy_no_cache $nocache;
到服务器部分。这似乎有效。
答案2
您应该像这样使用proxy_cache_bypass
和指令:proxy_no_cache
set $nocache 0;
if ($arg_filter_distance = "") {
set $nocache 1;
}
proxy_cache_bypass $nocache;
proxy_no_cache $nocache;
proxy_no_cache
from的定义nginx 文档
定义响应不会保存到缓存的条件。如果字符串参数中至少一个值不为空且不等于“0”,则不会保存响应:
这里我们测试 filter_distance GET 参数是否为空。如果为空,我们将 $nocache 设置为 1,然后proxy_cache_bypass
和proxy_no_cache
指令将生效。
您可以类似地添加其他 GET 参数,例如$arg_filter_type
,如果您有一个filter_type
GET 参数。