Теперь мы получаем достаточно трафика TLS на HAProxy, поскольку ни один процесс не может справиться с количеством новых подключений TLS.
Увидев, как StackOverflow использует прокси TLS по процессам 2-N который отправляет трафик обратно в процесс 1, я начал экспериментировать с этим, поскольку поведение по умолчанию (каждый процесс действует независимо) далеко не идеально.
Теперь у меня действительно есть такая конфигурация:
global
nbproc 3
cpu-map 1 0
cpu-map 2 1
cpu-map 3 2
stats bind-process all
stats socket /haproxy/proc1.sock mode 666 level admin process 1
stats socket /haproxy/proc2.sock mode 666 level admin process 2
stats socket /haproxy/proc2.sock mode 666 level admin process 3
defaults
log global
mode http
option dontlognull
listen tlsproxy
bind-process 2 3
bind 0.0.0.0:443 ssl crt /haproxy/example.com.pem
mode tcp
option tcplog
server fe_www abns@fe_www.sock send-proxy
frontend fe_www
bind-process 1
bind 0.0.0.0:80
bind abns@fe_www.sock accept-proxy
default_backend be_www
backend be_www
bind-process 1
server www01 10.1.1.1:80
Это работает.
Однако информация о TLS-соединении недоступна для fe_www
Это вызывает две проблемы:
ACL, которые используют информацию о соединении TLS (например, для перенаправления HTTP-трафика на HTTPS), теперь не работают, так как теперь все является небезопасным соединением.
HTTP-регистрация такой информации, как версия TLS, шифры TLS и т. Д., Нарушена - эта информация не передается.
Я пробовал поменять местами использование абстрактных именованных сокетов для петлевых привязок IP, но это не помогает.
Есть ли способ передать информацию TLS в прокси-соединении?
Вы можете использовать send-proxy-v2-ssl для отправки информации, связанной с SSL, но, как описано в этом ML нить HAProxy еще не реализует синтаксический анализ этой информации в принимающей части (accept-proxy).
Единственное решение здесь предлагается "gf_", вам нужно использовать режим http в части tlsproxy и выполните там все действия, связанные с ssl (ACL, перенаправления, ведение журнала).
Для тех, кто хочет / может дождаться выхода HAProxy 1.8, поддержка многопоточности с помощью nbthread
вместо того nbproc
похоже, это решит все эти проблемы.
Судя по связанному сообщению в блоге, похоже, что это правильная версия конфигурации для HAProxy 1.8 и более поздних версий:
global
nbthread 3
stats bind-process all
stats socket /haproxy/proc.sock mode 666 level admin
defaults
log global
mode http
option dontlognull
frontend fe_www
bind 0.0.0.0:80
default_backend be_www
backend be_www
server www01 10.1.1.1:80