Caching varnish vcl剥离查询参数,但不是全部

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

在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,但不起作用


任何值得赞赏的指针

以下似乎都有效:

$ 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)

谢谢我要试试这个,然后升级