1

Ранее я создал балансировщик нагрузки для веб-серверов в HAProxy, но это был HTTP, а не HTTPS.

Это он конфиг, который я ранее использовал.

listen appname 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    stats realm Strictly\ Private
    stats auth admin:XXXXXXXX
    balance roundrobin
    option http-server-close
    timeout http-keep-alive 3000
    option forwardfor
    cookie SRVNAME insert
    server lamp1 10.128.24.97:80 cookie S1 check
    server lamp2 10.128.24.98:80 cookie S2 check

Я не знаю, как переписать этот конфиг, чтобы сделать запросы на порт 443 доступными для серверов за HAProxy. Я скопировал предыдущий и изменил порт на 443. Однако я получаю много ошибок. Как я могу перевести конфигурацию, чтобы она действовала для соединения HTTPS / SSL?

listen httpsapp 0.0.0.0:443
    mode tcp
    stats enable
    stats uri /haproxy?stats
    stats realm Strictly\ Private
    stats auth admin:XXXXXXXXXXX
    balance roundrobin
    option http-server-close
    timeout http-keep-alive 3000
    option forwardfor
    cookie SRVNAME insert
    server lamp1 10.128.24.97:443 cookie S1 check
    server lamp2 10.128.24.98:443 cookie S2 check

Я получаю предупреждения при перезапуске HAProxy

[WARNING] 007/090716 (2409) : config : cookie will be ignored for proxy 'httpsapp' (needs 'mode http').
[WARNING] 007/090716 (2409) : config : 'option httplog' not usable with proxy 'httpsapp' (needs 'mode http'). Falling back to 'option tcplog'.
[WARNING] 007/090716 (2409) : config : 'stats' statement ignored for proxy 'httpsapp' as it requires HTTP mode.
[WARNING] 007/090716 (2409) : config : 'option forwardfor' ignored for proxy 'httpsapp' as it requires HTTP mode.
[WARNING] 007/090716 (2409) : config : 'option http-server-close' ignored for proxy 'httpsapp' as it requires HTTP mode.
[WARNING] 007/090716 (2409) : config : proxy 'httpsapp' : ignoring cookie for server 'lamp1' as HTTP mode is disabled.
[WARNING] 007/090716 (2409) : config : proxy 'httpsapp' : ignoring cookie for server 'lamp2' as HTTP mode is disabled.

1 ответ1

4

Когда вы создаете HTTPS-прокси (в зависимости от того, какую версию HAProxy вы используете и скомпилирована ли в нем поддержка SSL), у вас есть 2 разных способа обработки трафика.

Одним из них является маршрут, который вы выбрали с этим конфигом - сделайте его прямым прокси-сервером TCP и передавайте трафик на внутренний сервер без какой-либо обработки на уровне 7.

mode tcp

В режиме tcp вы не сможете использовать какие-либо параметры, специально предназначенные для прокси-серверов http - в вашем случае вы потеряете конечную точку статистики, обработку файлов cookie, вставку X-Forwarded-For. заголовок и т. д. Имеются предупреждения, позволяющие сообщить вам, что этот прокси-сервер все еще будет функционировать, но, вероятно, он не будет работать так, как вы ожидаете, поскольку вы используете параметры, специфичные только для http-прокси.

Другой путь, по которому вы могли бы пойти - это завершить SSL на сервере HAProxy. В этом сценарии у вас есть HTTPS-трафик между вашим клиентом и HAProxy и (как правило) незашифрованный HTTP-трафик между HAProxy и вашими внутренними серверами. Если вы собираетесь выполнить SSL-завершение в самом HAProxy, а не с чем-то вроде фунта, то вам нужно будет запустить v1.5 с скомпилированной поддержкой SSL. Ваша полученная конфигурация прокси может выглядеть примерно так:

listen appname
  bind 0.0.0.0:80
  bind 0.0.0.0:443 ssl crt /path/to/your/cert.pem ciphers TLSv1+HIGH:!SSLv2:RC4+MEDIUM:!aNULL:!eNULL:!3DES:@STRENGTH
  mode http
  stats enable
  stats uri /haproxy?stats
  stats realm Strictly\ Private
  stats auth admin:XXXXXXXX
  balance roundrobin
  option http-server-close
  timeout http-keep-alive 3000
  option forwardfor
  cookie SRVNAME insert
  server lamp1 10.128.24.97:80 cookie S1 check
  server lamp2 10.128.24.98:80 cookie S2 check

Пара замечаний по этому поводу. Эта директива listen фактически объединяет прокси HTTP и HTTPS в один и тот же. Его можно так же легко разделить на части, но, если это не требуется, мне бы хотелось, чтобы все было чище, как это. Кроме того, параметры "шифров" настраиваются по вашему вкусу или приложению - я не эксперт по SSL, но эти параметры мне подходят, поэтому я решил включить их.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .