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

HAProxy Multi-Process TLS Proxying не передает информацию TLS

Теперь мы получаем достаточно трафика 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