尝试设置透明,负载平衡,SSL反向代理。 可能吗?

我已经为这个项目做了几个星期的研究,不幸的是我是一个简单的代码猴,我对networking和SSL的知识是有限的。 几乎到目前为止,我所做的每一个search都把我带到了serverfault,我相信我已经得出这样的结论:这可能是不可能的。

我基本上需要开发一个解决scheme,将传入的HTTPS,并无缝地传递到克隆的Web服务器集群。 他们都服务相同的确切内容。 客户端SSL不应该在负载平衡器处终止。 (https – >负载平衡 – >集群)

所以在技术上我的问题是误导,逆向代理并不是真的必要,但是迄今为止我所有的解决scheme往往都是某种代理。 我基本上需要一个透明的SSL负载平衡解决scheme。

这是我到目前为止所尝试的。

  • Apache 2.4.x mod_proxy:工作于https – > proxy – > http – >集群。 完整的SSL解决scheme失败。

  • 磅:工作https – >代理 – >非常好,但端点服务器接收磅服务器的证书/信息。 我需要客户端证书,因为端点服务器需要能够撤销。 (由于安全考虑,吊销不能由代理/ MITM处理)。

我研究的其他选项是:鱿鱼,查尔斯,HAproxy,Nginx,查尔斯,笔和其他一些我不记得,我的大脑基本上是在这个时候糊涂。

笔可能是最好的解决scheme,因为它是TCPstream量,不应该需要解码SSL报头来处理stream量,但我很难findconfiguration它的信息。

硬件解决scheme并没有脱离桌面。 所以我想问题是1.这是可能的吗? 2.如何做到最好(廉价/开源更可取)? 谢谢!

只需确认,您不希望SSL终止于负载平衡器? 所以你的后端服务器将会提供https。

这是我会做的。 在Ubuntu或Debian下。

设置一些服务器作为您的负载平衡器/代理服务器(如果您需要,可以使用HA)。 他们并不需要超高端但是合理。

1)安装keepalived

sudo apt-get install keepalived

2)像这样设置/etc/keepalived/keepalived.conf:

vrrp_script chk_haproxy { script "killall -0 haproxy" # verify the pid existance interval 2 # check every 2 seconds weight 2 # add 2 points of prio if OK } vrrp_instance VI_1 { interface eth0 # interface to monitor virtual_router_id 51 # Assign one ID for this route priority 100 # 101 on master, 100 on backup nopreempt virtual_ipaddress { abcd # the virtual IP } track_script { chk_haproxy } } 

2)安装haproxy

sudo apt-get安装haproxy

3)使用像这样的configuration来设置/etc/haproxy/haproxy.cfg:

 global log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 4096 chroot /var/lib/haproxy user haproxy group haproxy daemon defaults log global mode tcp option dontlognull option redispatch retries 3 maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen myproxy abcd:443 mode tcp option tcplog balance leastconn server http1 xxxa:443 server http2 xxxb:443 server http3 xxxc:443 server http4 xxxd:443 

这是做什么用TCP模式(没有https)。 如果你想要HTTPS,你可以在这个(在同一台服务器上)安装螺柱或类似的东西。

abcd是你的虚拟IP地址。 xxxa,xxxb,xxxc,xxxd是负载均衡服务器的IP地址。 如果您愿意,这些可以放在防火墙后面。

如果使用HA选项,请确保在/etc/sysctl.conf中设置此选项:

net.ipv4.ip_nonlocal_bind = 1

如果其中一台haproxy服务器closures或者haproxy服务停止,另一台服务器将进入。有些用户可能会在这种情况发生时断开连接,但刷新应该修复该问题。

这适用于我,虽然我的设置稍有不同。 我在负载平衡器上终止SSL,然后从后端提供未encryption的通信。