Я тестирую новую настройку веб-сервера, которая имеет несколько проблем. По сути, у нас есть веб-сервер, где код использует удаленный IP для некоторых интересных вещей, а также некоторые каталоги apache, защищенные для некоторых определенных IP-адресов (наш офис и т. Д.).
Тем не менее, мы только что определили это за ha_proxy, чтобы мы могли взглянуть на добавление еще нескольких серверов приложений, но теперь удаленный IP-адрес всегда отображается как IP-адрес прокси, а не реальный удаленный пользователь. Это означает, что мы не можем добраться до некоторых мест, и наше приложение ведет себя немного странно, где важен IP пользователя.
Наш конфиг выглядит следующим образом:
global
maxconn 4096
pidfile /var/run/haproxy.pid
daemon
defaults
mode http
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen farm xxx.xxx.xxx.xxx:80
mode http
cookie GALAXY insert
balance roundrobin
option httpclose
option forwardfor
stats enable
stats auth username:userpass
server app1 xxx.xxx.xxx.xxx:80 maxconn 1 check
option forwardfor header X-Real-IP
иreqidel ^X-Real-IP:
это перестает подделывать IP-адреса в ваших журналах. К сведению:X-Real-IP
заголовок по умолчанию дляNginX
опцииset_real_ip_from
.Есть способ перекомпилировать HAproxy, чтобы включить Tproxy, который позволит пересылать адрес источника.
Об этом есть сообщение в блоге: http://blog.loadbalancer.org/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/
Несколько заметок:
Последнее ядро Linux (2.6.28-11-сервер) включает поддержку TProxy, поэтому перекомпиляция ядра не требуется.
Обязательно настройте серверы в вашей веб-ферме с адресом шлюза по умолчанию, который указывает на сервер HAProxy.
источник
Используйте модуль rpaf apache http://stderr.net/apache/rpaf/ Я знаю, что это и старый пост, но мне понадобилось несколько дней, чтобы найти это. Это представит любому приложению x-forwarded-for ip.
источник
Обратите внимание, что может показаться, что вы можете изменить то, что видит приложение, меняя заголовки Apache:
Однако это не работает для доступа Apache через «Разрешить из» и т. Д.
источник
X-Forwarded-For
заголовок, поскольку новый IP-адрес добавляется в конец существующего списка, разделенных запятой и пробелом. Измените на,(.*)
чтобы([^ ]*)$
получить только последний IP-адрес ... или используйтеmod_rpaf
илиmod_remoteip
для Apache 2.4 или новее.HAProxy, по замыслу, не может пересылать исходный IP-адрес на реальный сервер, почти как любой другой прокси.
Одним из решений может быть, если ваша единственная проблема связана с веб-сервером, - заглянуть в HTTP-заголовок X-forwarded-for, который должен содержать адрес клиента. Теперь это в значительной степени зависит от приложения / языка, но взгляните на этот пример в php:
$headers = apache_request_headers();
$real_client_ip = $headers["X-Forwarded-For"];
Если вы также хотите зарегистрировать исходный адрес, вы можете изменить LogFormat в httpd.conf, чтобы он выглядел примерно так:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{X-Forwarded-For}i\"" common
источник
Что ж, похоже, что X-Forwarded-for не подходит для вашей установки. Итак, есть ли какая-то особая причина для вас придерживаться haproxy? Кажется, что IPVS более подходит для ваших нужд (на самом деле я использую ldirector, который, в свою очередь, использует ipvs).
Взгляни на:
http://kb.linuxvirtualserver.org/wiki/IPVS
и
http://www.vergenet.net/linux/ldirectord/
Использование IPVS в режиме «IP-туннелирование» или «Прямая маршрутизация» сохраняет адрес клиента.
источник
Попробуйте mod_extract_forwarded с http://www.openinfo.co.uk/apache/
источник
Простой способ с haproxy в режиме tcp и nginx:
добавить send-proxy в качестве опции сервера:
haproxy.conf:
,
,
слушай ssl 0.0.0.0:443
режим tcp
баланс наименьшее
опция httpchk GET / ping
опция log-health-проверок
сервер w1 192.168.1.1:443 проверка отправки-прокси check-ssl проверки нет
server w2 192.168.1.1:443 проверка отправки-прокси check-ssl проверки нет
,
,
Nginx нужна поддержка прокси-протокола
nginx.conf:
,
,
прослушать 192.168.1.1:443 ssl proxy_protocol;
,
,
set_real_ip_from 192.168.1.0/24;
real_ip_header proxy_protocol;
,
,
источник