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

Доступ к адресу протокола прокси в HAProxy

Я запускаю 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-адрес источника.