6

我正在尝试根据响应标头缓存请求。现在我想要的条件是,如果响应同时具有 2 个标头 client-device 和 client-location,那么响应应该缓存在 nginx 端

所以我尝试了这段代码

if ($http_client_device && $http_clocation) {
    set $cache_key "$request_uri$http_client_device$http_client_location";
}
proxy_cache_key $cache_key;

但是 nginx 不允许那个 nginx: [emerg] 意外的 "&&" in condition in...

无论如何要解决这个问题?提前致谢

4

1 回答 1

7

经过一整天的搜索,我找到了一种解决方法,参考这个主题 http://rosslawley.co.uk/archive/old/2010/01/04/nginx-how-to-multiple-if-statements/

所以总的来说我的代码看起来像这样:

    if ($http_client_device) {
        set $temp_cache 1;
    }
    if ($http_client_location) {
        set $temp_cache 1$temp_cache;
    }
    if ($temp_cache = 11) {
        set $cache_key ...; 
    }

但仍然想知道在 nginx 中是否有更清洁的方式来执行 AND 运算符

于 2019-09-12T01:53:22.930 回答