我的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×tamp=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";
我该怎么做?非常感谢。
答案 0 :(得分:0)
有两种方法可以做到。
if ($request_uri ~ "([^\?]*)\?(.*)timestamp=([^&]*)&?(.*)") {
set $args $2$4;
}
fastcgi_cache_key "$host$request_method$args";
这将删除时间戳。您可以修改模式以忽略另一个字段,也可以使用它两次从$args
中删除字段。
下一个选项是使用openresty
或Nginx和lua,它允许您在代码中执行Lua脚本。 if
条件不被认为是好的。但随后让lua增加了你的软件需求