Я запускаю HAProxy, который получает протокол прокси уровня 4 от восходящего источника. Мне нужно создать собственный HTTP-заголовок с содержащимся в нем адресом. Кажется, я не могу найти, как я могу ссылаться на этот заголовок TCP.
Ниже приведен пример того, что я пытаюсь сделать:
frontend http_in
bind *:1025 accept-proxy
mode http
default_backend http_out
backend http_out
mode http
http-request set-header X-Custom-Header %[<ip from proxy protocol header>]
server some-server some-server:80
Как я могу убедиться, что я заполняю новый заголовок адресом из заголовка L4, а не каким-то поддельным заголовком http?
На основе документы из accept-proxy
bind и, в более общем смысле, при использовании протокола PROXY, все поля, содержащиеся в заголовке протокола PROXY (исходный IP-адрес и порт, целевой IP-адрес и порт) заменяют поля из реального соединения:
...
Протокол PROXY определяет адреса уровня 3/4 входящих
соединение, которое будет использоваться везде, где используется адрес, с единственным
исключение из правил "tcp-request connection", которое будет видеть только
реальный адрес подключения. Журналы будут отражать адреса, указанные в
протокол, если он не нарушен, и в этом случае реальный адрес
по-прежнему будет использоваться.
...
Это означает, что ваш бэкэнд будет выглядеть как
backend http_out
mode http
http-request set-header X-Custom-Header %[src]
server some-server some-server:80
Это работает, потому что src
Поле sample будет содержать IP-адрес источника, как определено в заголовке PROXY, а не фактический IP-адрес источника.