如何解决Haproxy前端配置,根据查询字符串替换响应头
我在前端使用了以下haproxy配置来根据查询字符串修改请求的响应标头:
frontend my-frontend
acl is-foo urlp(foo) 1
http-response replace-header Set-Cookie "(.*)" "\1; SameSite=None" if is-foo
根据我从文档中获得的信息,acl应该与所有请求相匹配,例如
example.com?a=b&foo=1&bar=2
example.com?foo=1
example.com?a=b&foo=1
它不应该与像这样的请求匹配
example.com?a=b&foo=0&bar=2
example.com?a=b
example.com?a=b&foo=bar
实际结果是acl从不匹配。
如果我将if
反转,即:if !is-foo
,则替换标头会出现在每个请求中。
因此问题必须是永远不会匹配的acl。
我使用haproxy 2.0.15
解决方法
我让它自己工作。
似乎urlp(foo)
在针对HTTP响应执行时在运行时不存在。
因此,我们需要先使用set-var(custom.name)
将其值存储在一个临时变量中。在运行时,如果条件为if,我们可以使用var(custom.name)
访问它,并将其与我们的条件匹配。我在这里使用urlp_val()
而不是urlp()
,因为该值将立即转换为int。
frontend my-frontend
http-request set-var(txn.foo) urlp_val(foo)
http-response replace-header Set-Cookie "(.*)" "\1; SameSite=None" if { var(txn.foo) eq 1 }
谢谢旅行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。