我是Varnish的新手,但我正在尝试将其用作反向代理。一切都很好,除了当应用程序将url编码的参数附加到请求时,它永远不会进入服务器。
我们尝试从哈希中删除参数,但它似乎不是我们麻烦的来源
sub vcl_hash {
hash_data(regsub(req.url, "\?.*", ""));
return (hash);
}
答案 0 :(得分:1)
通过运行varnishlog
命令检查其输出,找出幕后发生的事情的最佳方法是检查其输出。
对于您粘贴的VCL代码,这告诉Varnish忽略查询参数(?a=b&c=d&e=f
)以进行缓存。因此,以下URL将引用缓存中的同一对象:
http://your.site/some_page.html
http://your.site/some_page.html?a=b&c=d&e=f
http://your.site/some_page.html?abc=xyz
假设响应是可缓存的,您的后端将只看到它看到的第一个此类URL的请求。所有后续请求(无论查询参数如何)都将直接从缓存提供,直到缓存对象过期。
您提到了“url encoded”参数,但除非您有专门处理%XX编码八位字节的VCL代码,否则它们对Varnish处理请求的方式不会有任何影响。