Я пытаюсь понять, как настроить SSL-ферму с haproxy и обратными SSL-прокси, и ищу общие советы:
Можно ли встретить все следующее:
Если все три из них невозможны, мне интересно, какие могут быть компромиссы. Сейчас я рассматриваю что-то вроде следующего, но это может измениться:
Haproxy 443 TCP Proxy Frontend -> SSL-прокси (возможно, Nginx) на высоких портах -> Haproxy HTTP Front-End -> Веб-серверы
Я понимаю, что, вероятно, мог бы пропустить второй переход назад к haproxy, но единая перспектива всего в HAproxy может быть приятной. Также, если мне придется использовать TProxy, возможно, возвращение к haproxy из фермы SSL упростит маршрутизацию?
Ссылки:
http://haproxy.1wt.eu/download/1.5/doc/configuration.txt
http://1wt.eu/articles/2006_lb/index_05.html
Кайл,
Если вам нужна только отработка отказа для части SSL, а не балансировка нагрузки, вот что я предлагаю. Вы устанавливаете haproxy + keepalived + stunnel (пропатченный) на два узла. Keepalived владеет адресом службы и проверяет наличие процессов stunnel и haproxy, чтобы вычислить его вес, чтобы узел в наилучшей форме стал ведущим. Stunnel принимает трафик на порт 443 и локально перенаправляет его на haproxy на любой порт, который вам нравится. Чтобы haproxy регистрировал IP-адрес клиента, вам понадобится патч x-forwarded-for для stunnel (вы можете найти его на моем сайте). Затем вы скажете haproxy, чтобы он регистрировал заголовок x-forwarded-for.
Однако есть ограничение. Если вы поддерживаете HTTP keep-alive, то stunnel добавит заголовок x-forwarded-for только один раз, что немного проблематично. В Exceliance мы начали работу над патчем для пересылки параметров подключения от stunnel к haproxy вместо того, чтобы играть с x-forwarded-for. Таким образом, haproxy считает, что он получает соединение от реального клиента. Если вам интересно, скажите мне, мы отправим его вам, когда он будет готов.
Хорошо, я вижу это довольно поздно, но как насчет:
VLAN1 VLAN2
INET -- | -- [SSL] -- | -- [HTTP Load Balancer]
| |
| -- [SSL] -- | -- [WEB01]
| |
| -- [SSL] -- | -- [WEB02]
|
| -- [WEB03] etc
В словах:
Выскакивает пара вещей:
Получите журнал HTTP, в котором указаны фактические IP-адреса клиентов.
Предполагая, что первое устройство уровня HTTP добавляет заголовок X-FORWARDED-FOR, и вы используете что-то вроде чего-то вроде этот или F5's Плагины IIS, это должно работать.