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

Добавить HTTP-заголовок X-Forwarder-For в HAProxy

я использую HAProxy 1.3.26 на моем CentOS 5.8 проксировать все запросы на выделенный сервер. Я использую HAProxy только для проксирования HTTP и HTTPS на один сервер, поэтому балансировки нагрузки нет.

Мой haproxy.cfg довольно просто:

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

defaults
        log global
        option dontlognull
        option httpclose
        option forwardfor
        clitimeout 60000
        srvtimeout 60000
        contimeout 5000
        retries 3
        option redispatch

listen http 192.168.0.1:80
        mode tcp
        option tcplog
        maxconn 10000
        server web01 192.0.1.13:80 maxconn 5000

listen https 192.168.0.1:443
        mode tcp
        maxconn 10000
        server web01 192.0.1.13:443 maxconn 5000

где:

192.168.0.1 - server where HAProxy is installed
192.0.1.13  - server to which HTTP requests are forwarded

Я хочу видеть IP-адреса клиентов в моем Apache 2.2.3 доступ к журналам. Этот вариант обычно достигается добавлением HTTP X-Forwarded-For заголовок, а затем считывая его в журналах веб-сервера. Итак, я добавил в httpd.conf следующие строки:

LogFormat "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"" combined_forwarded
SetEnvIfNoCase X-Forwarded-For "." from_proxy=1
CustomLog logs/access_log combined env=!from_proxy
CustomLog logs/access_log combined_forwarded env=from_proxy

Проблема в том, что единственный зарегистрированный IP-адрес 192.168.0.1 (Сервер HAProxy). Я пробовал разные конфигурации, читал документацию, искал в Google, но до сих пор не могу понять, почему IP-адреса клиентов не регистрируются.

Я чувствую, что мне не хватает чего-то простого, поскольку конфигурации очень простые. Пожалуйста, помогите поправить конфиги, если возможно.

Спасибо за любую помощь.

Не забывайте, что это не сработает для прокси https, поскольку haproxy не сможет изменять содержимое зашифрованного сеанса. Вы также можете проверить модуль mod_rpaf для Apache, который упрощает все это.