我目前正在尝试设置一个 nginx 缓存,它应该长时间缓存一个位置,但如果查询参数仅存在几分钟。
基本上来说:
http://example.com/mypath -> long cache
http://example.com/mypath?param=1 -> short cache
我当前的配置如下所示:
location "~^(/mypath)"
{
proxy_cache example.com_my_cache_http;
proxy_cache_valid 404 15m;
...
}
我无法使用不同的位置,因为位置无法匹配查询参数,我尝试使用如果(我知道这是不好的做法)
if ($args ~ param) {
proxy_cache example.com_my_cache_http;
proxy_cache_valid 404 15m;
} else {
proxy_cache example.com_my_cache_http;
proxy_cache_valid 404 2d;
}
其结果是:
Testing nginx configuration: nginx: [emerg] "proxy_cache" directive is not allowed here
我也尝试使用变量:
set $time "1h";
if ($args ~ param) {
set $time "2m";
}
proxy_cache example.com_my_cache_http;
proxy_cache_valid 404 $time;
其结果是:
Testing nginx configuration: nginx: [emerg] invalid time value "$time"
我真的没有主意了,任何帮助或提示都将不胜感激。
答案1
我的第一个想法是使用map
。
map $arg_param $cache_valid_404 {
"" 2d;
1 15m;
}
然后设置:
proxy_cache_valid 404 $cache_valid_404;