web-dev-qa-db-ja.com

haproxyは条件付きでヘッダーを追加しません

私は次の設定を持っています、それは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-FooX-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

2
zerkms

応答ヘッダーにホストヘッダーがないため、ACLが一致することはありません。次のようなものを使用します。

    http-request set-var(txn.foo) req.hdr(Host)
    http-response set-header bar 1 if { var(txn.foo) foo.bar }
2
txn.foo