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

HAProxy - как добавить клиентский ip в заголовки X-Client-IP и X-Forwarded-For?

У меня проблема с сервером HAProxy. Я хочу перенаправить в заголовок IP клиента. Я почти сделал это, но есть интересный случай, и я не могу в нем разобраться. Мне нужно написать IP-адрес клиента в 2-х местах заголовка, в тегах X-CLIENT-IP и X-FORWARDED-FOR.

Проблема в следующем: когда я использую

option http-server-close
option forwardfor

На целевом сервере я вижу в заголовке X-FORWARDED-FOR = xxx.xxx.xxx.xxx (ip-адрес клиента), но заголовок x-client-ip отсутствует.

Когда я использую:

option forwardfor header X-Client-IP
option http-server-close

На целевом сервере я вижу заголовок X-CLIENT-IP = xxx.xxx.xxx (клиентский IP), но X-FORWARDED-FOR = xxx.xxx.xxx.xxx (HAProxy ip)

Мне нужно увидеть в целевом заголовке, где X-CLIENT-IP и X-FORWARDED-FOR имеют значение клиентского IP.

Я пытаюсь смешивать конфигурации вроде

 option forwardfor
 option forwardfor header X-Client-IP
 option http-server-close

Никакого эффекта. Также не могу установить какие-либо модули. Цель - IIS.

Любые идеи? :(

Вы можете попробовать настроить собственный заголовок, например:

http-request set-header X-Client-IP %[src]

Или вы даже можете скопировать его из заголовка X-Forwarded-For, я думаю, синтаксис будет примерно таким:

http-request set-header X-Client-IP req.hdr_ip([X-Forwarded-For])

Если вы хотите использовать оба, вам нужно добавить вторую с http-request ключевое слово.

# add X-FORWARDED-FOR
option forwardfor
# add X-CLIENT-IP
http-request add-header X-CLIENT-IP %[src]

Предлагаемый выше ответ, который не сработал для KacproSo, просто нужно было прочитать значение, добавив &[...], так что это должно работать нормально:

http-request set-header X-Client-IP %[req.hdr_ip([X-Forwarded-For])]

Пробуем HAproxy 1.7, это правильный синтаксис, который делает эту работу, без квадратных скобок вокруг X-Forwarded-For

   http-request set-header X-Client-IP %[req.hdr_ip(X-Forwarded-For)]

этот подходит мне лучше всего:

backend example
    mode http
    option forwardfor
    http-request set-header X-Forwarded-For %[src]

Вы можете установить модуль mod_rpaf на свой сервер (а). Это копирует X-FORWARDED-FOR IP в X-CLIENT-IP. Для получения дополнительной информации см. этот. В Windows у вас должны быть аналогичные модули, что-то вроде фильтров X-Forwarded-For ASAPI.