Назад | Перейти на главную страницу

set-header для ответов HAProxy

Новым в версии 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, но она определенно не была четко задокументирована.