Nginx代理缓存密钥不保存查询参数的变体

时间:2018-03-12 22:28:31

标签: nginx

我有一个Nginx配置,其/位置的代码如下:

    location = / {
      gzip_proxied any;
      gzip on;
      gzip_types text/xml text/plain text/css text/javascript application/javascript;
      gzip_disable (gozilla|traviata);
      gzip_min_length 1400;
      gzip_comp_level 9;
      proxy_cache index_cache;
      proxy_pass http://nodejs;
      proxy_cache_key $proxy_host$uri?$arg_id&$arg_toggle-on&$arg_toggle-off;

      set $nocache 0;

      if ($arg_id = "") {
        set $nocache 1;
      }

      if ($arg_number) {
        set $nocache 1;
      }

      proxy_no_cache $nocache;
    }

id查询参数由一个整数组成,通常为1-4位数。

toggle-ontoggle-off查询参数包含每个切换以逗号分隔的字符串。

例如,我可以:

https://mywebsite.com/?id=1234&toggle-on=animations,fields,experiments&toggle-off=control

toggle-on会在代码中自行评估animationsfieldsexperiment字符串。

但是,我发现由于某种原因,我根本无法正确缓存此内容。

id字段已正确缓存 - Nginx知道一个ID与另一个ID之间的差异(此网站的UI根据此值动态更改)。

然而,toggle-ontoggle-off不会。它们没有正确地缓存在提供时为每个查询参数分配了哪些值

我可以深入挖掘哪些东西,以便我可以更少地陷入困境?

0 个答案:

没有答案