HAProxy 多进程 TLS 代理未传递 TLS 信息

HAProxy 多进程 TLS 代理未传递 TLS 信息

现在,HAProxy 上的 TLS 流量已经足够了,单个进程无法应对大量新的 TLS 连接。

了解之后StackOverflow 使用 TLS 代理流程 2-将流量发送回进程 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

这会导致两个问题:

使用 TLS 连接信息的 ACL(例如将 HTTP 流量重定向到 HTTPS)现在已被破坏,因为现在一切都是非安全连接。

TLS 版本、TLS 密码等信息的 HTTP 日志记录已损坏 —— 这些信息无法传输。

我尝试将抽象命名套接字的使用换成环回 IP 绑定,但这没有帮助。

有没有办法通过代理连接传输 TLS 信息?

答案1

您可以使用 send-proxy-v2-ssl 发送 SSL 相关信息,但正如本 ML 中讨论的那样线HAProxy 尚未实现在接收部分(accept-proxy)中对这些信息的解析。

这里唯一的解决方案是按照“gf_”的建议,您需要使用模式 http在 tlsproxy 部分并在那里执行所有与 ssl 相关的操作(ACL、重定向、日志记录)。

答案2

对于那些愿意/能够等待 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

相关内容