Я использую 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).