我们有以下url我们想代理caching:
file.php?parameter=one¶mater2=two&r=EPOCHTIMESTAMP
查询string参数“参数”因请求而异。 “paramater2”也是如此。
查询string参数r是我们用来确保客户端不提供caching(客户端)内容的时间戳。 又名“caching克星”。 是的,我们也使用所有合适的不cachingh头。
现在,我们想通过nginx代理caching中的一些请求。 是否有可能指示nginx忽略r查询string参数,但使用所有其他设置caching键的条目? 如果我们不能忽略参数r,那么nginx代理caching将是无用的,因为每个caching密钥将是唯一的。
谢谢。
我们已经find了这个问题的解决scheme。
这样做的正确方法是使用nginx $arg_...variables构造caching键。 $arg_...将包含查询string参数。 所以在上面的例子中,我们将在caching键中使用$arg_parameter和$arg_parameter2 。
nginx.conf的结果如下所示:
http { ... server { location / { ... proxy_cache_key $scheme$proxy_host$uri$is_args$arg_parameter$arg_parameter2; } } ... }
请注意,包含连字符(短划线)的querystring参数(如data-*参数)不能与$arg_paramName语法一起使用。 使用Lua的解决方法可以在这篇文章中find。