HAProxy多进程TLS代理不会传递TLS信息

现在,我们在HAProxy上获得了足够的TLSstream量,因为单个进程无法处理新的TLS连接数量。

看到StackOverflow如何在进程2- N上使用TLS代理 ,然后将stream量发送回进程1,我开始试验,因为默认行为(每个进程独立运行)并不理想。

我现在已经有效地得到了这样的configuration:

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连接信息(例如,将HTTPstream量redirect到HTTPS)的ACL现在被破坏,因为所有的东西现在都是不安全的连接。

HTTPlogging像TLS版本,TLS密码等信息被破坏 – 信息没有被传送。

我试过交换使用抽象名为套接字的环回IP绑定,但这没有帮助。

有没有办法在代理连接中传递TLS信息?

对于那些愿意/能够等待HAProxy 1.8出来的人来说,使用nbthread而不是nbproc multithreading支持看起来将会解决所有这些问题。

根据链接的博客post,看起来这将是用于HAProxy 1.8及更高版本的configuration的正确版本:

 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 

您可以使用send-proxy-v2-ssl发送与SSL相关的信息,但是如本ML所讨论的那样,HAProxy还没有在接收部分(accept-proxy)中parsing这些信息。

这里唯一的解决scheme是“gf_”所build议的,你需要在tlsproxy部分使用http模式 ,并在那里执行所有与ssl相关的操作(ACL,redirect,日志logging)。