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

HAProxy для перенаправления http на https для нескольких доменных имен без завершения SSL

Я использую HAProxy для перенаправления трафика на разные веб-серверы в локальной сети.

Без включенного SSL я могу маршрутизировать на основе имени хоста, подобного этому (в разделе внешнего интерфейса):

acl is_local hdr_end(host) -i mirror.skbx.co
acl is_kiev  hdr_end(host) -i kiev.skbx.co

use_backend kiev if is_kiev
default_backend wwwlocalbackend

Как только я включаю SSL, все работает в режиме TCP через режим Pass through SSL.

Но мне также нужно убедиться, что HTTP перенаправлен на HTTPS. Когда я использую:

redirect scheme https if !{ ssl_fc }

в моем разделе HTTP-интерфейса конфигурации HAProxy все запросы перенаправляются на серверную часть по умолчанию, поэтому вышеупомянутые правила acl игнорируются, если запрос перенаправляется из redirect scheme.

На этот вопрос есть ответ о том, как заставить его работать через SSL Termination, где SSL урезан на уровне HAProxy.

У меня вопрос - возможно ли перенаправление HTTP на HTTPS при сохранении сквозного режима (режим tcp)?

Полная конфигурация разделов внешнего и внутреннего интерфейса, которые у меня есть, находится в это суть.

В режиме TCP HAproxy на самом деле даже не завершает работу SSL, он просто передает пакеты на бэкэнд. поскольку https-frontend не может декодировать заголовки в следующих строках, он просто передает все в default_backend.

Вам нужно будет указать сертификат на bind line и запустите как Frontend, так и Backends в mode http.

Например:

frontend http-frontend
    bind 10.1.0.4:80

    redirect scheme https if !{ ssl_fc }

frontend https-frontend
    bind 10.1.0.4:443 ssl crt /etc/ssl/haproxy.pem

    option httplog
    mode http

    acl is_local hdr_end(host) -i mirror.skbx.co
    acl is_kiev  hdr_end(host) -i kiev.skbx.co

    use_backend kiev if is_kiev
    default_backend wwwlocalbackend

backend wwwlocalbackend
    mode http
    server 1-www 127.0.0.1:443

backend kiev
    mode http
    server 1-www 10.8.0.6:443

куда /etc/ssl/haproxy.pem содержит сертификат для всех доменов, которые вы хотите разместить, или сертификат с подстановочными знаками, который их охватывает.

Если у вас есть отдельные сертификаты для каждого домена, вам необходимо выполнить настройку frontend ft_test из принятого ответа в опубликованном вами вопросе (Настройте несколько сертификатов SSL в Haproxy).