根据 GET 查询更改 proxy_cache_valid 值

根据 GET 查询更改 proxy_cache_valid 值

我目前正在尝试设置一个 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;

相关内容