【问题标题】:Regex capture group in Varnish VCLVarnish VCL 中的正则表达式捕获组
【发布时间】:2018-04-19 22:57:49
【问题描述】:

我的网址格式为:

http://some-site.com/api/v2/portal-name/some/webservice/call

我要获取的数据需要

http://portal-name.com/webservices/v2/some/webservice/call

(是的,我可以重写应用程序,以便它使用其他 URL,但我们目前正在测试 varnish,所以现在它不能是侵入性的。)

但我无法在 varnish VCL 中正确获取 URL。 api 部分被空字符串替换,不用担心,现在是门户名称。

我尝试过的事情:

if (req.url ~ ".*/(.*)/") {
  set req.http.portalhostname = re.group.0;
  set req.http.portalhostname = $1;
}

来自https://docs.fastly.com/guides/vcl/vcl-regular-expression-cheat-sheetExtracting capturing group contents in Varnish regex

是的,std 已导入。

但这给了我一个

Syntax error at
('/etc/varnish/default.vcl' Line 36 Pos 35)
    set req.http.portalhostname = $1;

或者一个

Symbol not found: 're.group.0' (expected type STRING_LIST):

那么:我该怎么做呢?当我提取了portalhostname 后,我应该能够简单地执行regsub 以用空字符串替换该值,然后在前面加上“webservices”,我的 URL 就完成了。

我正在使用的清漆版本:varnish-4.1.8 revision d266ac5c6

【问题讨论】:

  • 试试set resp.http.portalhostname = re.group.1;
  • 谢谢,但同样的错误,Symbol not found: 're.group.1' (expected type STRING_LIST):

标签: regex varnish varnish-vcl


【解决方案1】:

遗憾的是 re.group 似乎已在某些版本中被删除。类似的功能似乎可以通过几个 vmod 之一访问。见https://varnish-cache.org/vmods/

【讨论】:

    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 2015-07-24
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多