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

HAProxy не пересылает заголовки клиентов

У нас установлен HAProxy перед Apache. Настройка работает, но IP-адрес клиента не пересылается, несмотря на правило "forwardfor".

Я ранее исследовал ответы на такие ошибки сервера, как этот, например. haproxy и перенаправление IP-адреса клиента на серверы но решить проблему пока не удалось.

Это конфиг:

frontend apache-http
    bind 192.168.56.150:80
    mode http
    option http-server-close
    option forwardfor header X-Real-IP
    reqadd X-Forwarded-Proto:\ http
    default_backend apache-http
    stats enable
    #stats hide-version

backend apache-http
    # redirect scheme https if !{ ssl_fc }
    balance roundrobin
    cookie SERVERID insert indirect nocache
    server www-1 10.0.0.120:80 cookie S1 check
    server www-2 10.0.0.130:80 cookie S2 check

Переменные PHP-сервера возвращают информацию о HAProxy:

$_SERVER['REMOTE_ADDR'] returns 10.0.0.120
$_SERVER['HTTP_X_FORWARDED_FOR'] returns nothing

Журнал Apache также возвращает ---

config:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

Мне что-то не хватает в конфигурации HAProxy?

Проблема заключается в несоответствии конфигурации между HAProxy и Apache.

Вы сказали HAProxy отправить реальный IP-адрес клиента в заголовке с именем X-Real-IP:

option forwardfor header X-Real-IP

В Apache вам нужен заголовок под названием X-Forwarded-For:

$_SERVER['HTTP_X_FORWARDED_FOR'] returns nothing
LogFormat "%{X-Forwarded-For} ...

У вас есть два варианта исправить это.

  1. Позвольте HAProxy добавить заголовок с именем по умолчанию, изменив

    option forwardfor header X-Real-IP
    

    к

    option forwardfor  
    
  2. Измените Apache и свой PHP-код, чтобы найти право заголовок:

    $_SERVER['HTTP_X_Real_IP']
    
    LogFormat "%{X-Real-IP} ...