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

впереддля информации отсутствует

Я использую следующую конфигурацию для балансировки нагрузки https-соединений, используя haproxy 1.4.8. Разгрузка SSL выполняется apache.

listen ssl_to_waf 192.168.101.54:443
    mode tcp
    balance roundrobin
    option ssl-hello-chk
    server wafA 192.168.101.61:444 check

listen ssl_from_waf 192.168.101.61:445
    balance roundrobin
    option forwardfor
    server webA 192.168.101.46:80 check

Для HTTP-запросов это отлично работает, запросы легко распределяются на мои серверы Apache. Но для запроса HTTPS я теряю информацию о форварде. Мне нужно сохранить IP-адрес клиента. Как я могу использовать HAproxy для балансировки нагрузки на нескольких серверах SSL, позволяя этим серверам знать IP-адрес клиента?

Обновитесь до haproxy 1.5-dev12 и включите разгрузку SSL. Затем внутренние серверы получают HTTP-соединение, даже если клиент использует SSL. И поскольку haproxy видит внутри сеансов SSL, он может добавить заголовок forwardfor.

Краткий ответ: нельзя.

HAProxy не понимает SSL и, следовательно, балансирует эти соединения в режиме TCP. В forwardfor опция ничего не значит в режиме TCP, так как это заголовок HTTP.

Все, что я читал о SSL и HAProxy, рекомендует использовать другое программное обеспечение. Впереди HAProxy для обработки разгрузки SSL. Некоторые из предложений были Pound и nginx, однако действительный момент был поднят, что это сами прокси-серверы с балансировкой нагрузки, и зачем вам вводить дополнительную сложность и дополнительный прыжок, когда вы можете просто один из них обрабатывать балансировку нагрузки и удалять HAProxy целиком?

Я бы никогда не предлагал использовать программное обеспечение для разработчиков в производственной среде. Я использую nginx для ssl перед прокси ha на тех же машинах. Прекрасно работает даже при больших нагрузках. Ваши серверы apache будут получать http-трафик. Вам нужно отправить заголовок x-forwarded-for в apache, а затем установить модуль mod-rpaf, чтобы apache мог видеть IP-адрес клиента. Вам также может потребоваться установить apache env var, чтобы приложения знали, что соединение было по ssl.