Новым в версии 1.5 является http-response add-header
директива. Как написано в документация - это можно использовать в frontend
, backend
и listen
.
То, что я пытался сделать в frontend
раздел:
use_backend some_backend if some_condition
http-response add-header Vary Origin if some_condition
Но это ни на что не влияет. Эта же строка помещена в backend
раздел работает отлично. Может ли кто-нибудь помочь мне понять, чего мне здесь не хватает? Я не понимаю, почему это не работает в frontend
раздел.
Я предполагаю, что внутри fronted
пока нет ответа, поэтому директива не выполняется. Я пробовал использовать его до и после смерти use_backend
директива.
Запуск haproxy на переднем плане (haproxy -d -V -f haproxy.cfg
) с вашим образцом отображается следующее предупреждение:
acl 'some_condition' will never match because it only involves keywords that are incompatible with 'frontend http-response header rule'
Повозившись с моей конфигурацией, я обнаружил, что это предупреждение отображается при использовании этого ACL:
acl some_condition req.hdr(Content-Type) -i application/json
Но не при использовании этого ACL:
acl some_condition res.hdr(Content-Type) -i application/json
Разница в том, что res
vs. req
, поэтому проверяйте заголовки ответов вместо заголовков запросов. Это заставляет меня думать, что http-response header
править в frontend
не может проверять request
заголовки.
Я не знаю, предназначена ли эта функция для HAProxy, но она определенно не была четко задокументирована.