Caching varnish vcl剥离查询参数,但不是全部
在varnish vcl逻辑中,除了影响页面行为的几个查询参数外,是否有任何方法去除URL中的所有查询参数 比如说, www.xyz.com/search?city=sandiego&state=CA&type=xml&number=321&key=afdsf34345 www.xyz.com/search?city=sandiego&state=CA&type=xml&number=321&key=afdsf34345 想要保留“城市”和“类型”,但其他任何东西都需要剥离 我试过使用regsub,但不起作用Caching varnish vcl剥离查询参数,但不是全部,caching,varnish,varnish-vcl,Caching,Varnish,Varnish Vcl,在varnish vcl逻辑中,除了影响页面行为的几个查询参数外,是否有任何方法去除URL中的所有查询参数 比如说, www.xyz.com/search?city=sandiego&state=CA&type=xml&number=321&key=afdsf34345 www.xyz.com/search?city=sandiego&state=CA&type=xml&number=321&key=afdsf34345 想要保留“城市”和“类型”,但其他任何东西都需要剥离 我试过使用regsu
任何值得赞赏的指针以下似乎都有效:
$ cat test.vtc
varnishtest "Remove certain parameters."
server s1 {
rxreq
txresp -body "made it!"
} -start
varnish v1 -vcl {
backend default {
.host = "${s1_addr}";
.port = "${s1_port}";
}
sub vcl_recv {
if (req.url ~ "\?") {
set req.http.X_City = regsub(req.url, ".*[?&](city)=(\w+).*", "\1=\2");
set req.http.X_Type = regsub(req.url, ".*[?&](type)=(\w+).*", "\1=\2");
set req.url = regsub(req.url, "(.*)\?.*", "\1");
set req.url = req.url + "?" + req.http.X_City + "&" + req.http.X_Type;
unset req.http.X_City;
unset req.http.X_Type;
}
}
sub vcl_deliver {
set resp.http.X_Test_Result = req.url;
}
} -start
client c1 {
txreq -url "/search?city=sandiego&state=CA&type=xml&number=321&key=afdsf34345"
rxresp
expect resp.http.X_Test_Result == "/search?city=sandiego&type=xml"
expect resp.status == 200
expect resp.body == "made it!"
} -run
varnish v1 -expect client_req == 1
通过清漆测试
通过:
$ varnishtest test.vtc
# top TEST test.vtc passed (1.341)
谢谢我要试试这个,然后升级