我有以下配置,它位于frontend
tls 连接部分下,并且 haproxy 终止 https 连接:
acl domain-acl-host hdr(host) -i domain.tld
rspadd X-Foo:\ bar if domain-acl-host
rspadd X-Baz:\ baz
http-response set-header X-Bar bar if domain-acl-host
use_backend backend_name if domain-acl-host
该use_backend
指令按预期有条件地工作(有多个不同的域名提供服务,并且选择正确)
但是没有条件地将标题添加/设置到响应中。
我预计在那里添加 3 个额外的标题:X-Foo
、X-Baz
和X-Bar
,但只X-Baz
添加了:
< HTTP/1.1 302 Found
< Server: nginx
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Cache-Control: max-age=0, must-revalidate, private
< Date: Sun, 14 Oct 2018 20:25:59 GMT
< Location: https://domain.tld/somewhere/else
< X-Baz: baz
我确信我遗漏了一些琐碎的东西,但阅读文档或谷歌并没有帮助。
附言:这是haproxy 1.8.8
答案1
响应标头中没有主机标头,您的 acl 永远不会匹配。使用如下方法:
http-request set-var(txn.foo) req.hdr(host)
http-response set-header bar 1 if { var(txn.foo) foo.bar }