У меня такой конфиг, он под 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
Я уверен, что упускаю что-то банальное, но чтение документации или гугла не помогло.
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 }