PCMover (http://www.laplink.com/pcmover/) работал на меня перемещающийся от одного ноутбука до другого. Все мигрировало хорошо, хотя наша группа IT - то, кто выполнил фактическую утилиту, таким образом, я не уверен в простоте использования.
Заключенный в кавычки из документа HAProxy в haproxy.1wt.eu.
- if the application needs to log the original client's IP, use the "forwardfor" option which will add an "X-Forwarded-For" header with the original client's IP address. You must also use "httpclose" to ensure that you will rewrite every requests and not only the first one of each session: option httpclose option forwardfor
Указано, что приложение должно рассматривать HTTP-заголовок X-Forwarded-For для знания клиентского адреса IP. Походит на единственный способ войти в Ваш случай.
Haproxy 1.4 начал новый режим с "опции http-server-close". Это все еще закрыло соединение с сервером, но поддерживает активный к клиенту если возможный и используемый. На большинстве установок Вы, вероятно, хотите использовать это, поскольку это помогает с задержкой на единственной части высокой задержки Вашего соединения (между Haproxy и клиентом).
option http-server-close option forwardfor
Обратите внимание, что казалось бы, что можно переопределить что see's приложения мое изменение заголовков Apache:
SetEnvIf X-Forwarded-For (.*) REMOTE_ADDR=$1
SetEnvIf X-Forwarded-For (.*) REMOTE_IP=$1
Однако это не работает на доступ Apache через, "Позволяют от" и т.д.
HAProxy, дизайном, не может передать исходный IP-адрес реальному серверу, в значительной степени как никакой другой прокси.
Одно решение может быть, если Ваша единственная проблема с веб-сервером, для изучения X-forwarded-for HTTP-заголовка, который должен содержать адрес клиента. Теперь, это - в значительной степени конкретное приложение/язык, но смотрите на этот пример в 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 является большим количеством aproppriate для Ваших потребностей (я на самом деле использую ldirector, который в свою очередь использует ipvs).
Смотрите на:
http://kb.linuxvirtualserver.org/wiki/IPVS
и
http://www.vergenet.net/linux/ldirectord/
Используя IPVS в 'IP Tunneling' или 'Direct Routing' режим сохраняет адрес клиента.
Существует способ перекомпилировать HAproxy для включения Tproxy, который позволит передавать исходного адреса.
Существует сообщение в блоге здесь об этом: http://blog.loadbalancer.org/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/
Несколько примечаний:
Последнее ядро Linux (2.6.28 11 серверов) включает поддержку TProxy, так перекомпиляция ядра не необходима.
Удостоверьтесь, что настроили серверы в своей веб-ферме с адресом шлюза по умолчанию, который указывает на сервер HAProxy.
Попробуйте mod_extract_forwarded из http://www.openinfo.co.uk/apache/
LoadModule extract_forwarded_module modules/mod_extract_forwarded.so
MEFOrder refuse,accept
MEFRefuse all
MEFAccept xxx.xxx.xxx.xxx
Используйте rpaf апачский модуль http://stderr.net/apache/rpaf/, я знаю, что это и старое сообщение, но мне потребовались дни для нахождения этого. Это представит любому приложению x-forwarded-for IP.
Простой способ с haproxy в режиме tcp и nginx:
добавить send-proxy в качестве опции сервера:
haproxy.conf:
.
.
прослушать ssl 0.0.0.0:443[1262 sizesmode tcp
баланс минимальное соединение
параметр httpchk GET / ping
параметр журнал-проверки работоспособности
сервер w1 192.168.1.1:443 send-proxy check check-ssl verify none
сервер w2 192.168.1.1 : 443 send-proxy check check-ssl verify none
.
.
Nginx должен поддерживать протокол прокси
nginx.conf:
.
.
listen 192.168.1.1 : 443 ssl proxy_protocol;
.
.
set_real_ip_from 192.168.1.0/24;
real_ip_header proxy_protocol;
.
.