fastcgi_cache_key在请求uri中排除了一些args

时间:2017-08-18 09:50:36

标签: regex nginx fastcgi

我的fastcgi_cache_key是:

fastcgi_cache_key "$host$request_method$request_uri";

我的$ request_uri中有时间戳和签名:

 /abc/xyz?product_id=10529125896&shop_id=17224077&shop=abc.com&path_prefix=%2Fa%2Fcomment&timestamp=1503044416&signature=882102c51c7b7bd4c5d8521a6565fc70c27b908547316f1123eb4af13b19f2da 

因此,缓存总是MISS(因为它具有不同的时间戳和签名)。我的问题是:

我想创建新的var并将该var用于fastcgi_cache_key。那个var会有这样的东西:

MYVAR

/abc/xyz?product_id=10529125896&shop_id=17224077&shop=abc.com

fastcgi_cache_key会喜欢这个:

fastcgi_cache_key "$host$request_method$myvar";

我该怎么做?非常感谢。

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到。

if ($request_uri ~ "([^\?]*)\?(.*)timestamp=([^&]*)&?(.*)") {
  set $args $2$4;
}
fastcgi_cache_key "$host$request_method$args";

这将删除时间戳。您可以修改模式以忽略另一个字段,也可以使用它两次从$args中删除字段。

下一个选项是使用openresty或Nginx和lua,它允许您在代码中执行Lua脚本。 if条件不被认为是好的。但随后让lua增加了你的软件需求