私は次の設定を持っています、それはtls接続のfrontend
セクションの下にあり、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
私は些細なことを見逃していると確信していますが、ドキュメントやグーグルを読んでも役に立ちませんでした。
PS:それはhaproxy 1.8.8
応答ヘッダーにホストヘッダーがないため、ACLが一致することはありません。次のようなものを使用します。
http-request set-var(txn.foo) req.hdr(Host)
http-response set-header bar 1 if { var(txn.foo) foo.bar }