现在,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