如果我只使用roundrobin,Haproxy可以使用SSL吗?

我一直在阅读有关HaProxy的负载平衡,并想知道如果我不做任何第7层处理,是否可以使用这个负载平衡器? 我想在TCP级别负载平衡只使用roundrobin可以与SSL连接? 我只接受SSL(没有任何HTTP)。 我不想在负载平衡器上终止SSL(这就是为什么我想避免STunnel)。

谢谢。

如果你想在负载平衡器上终止SSL,那么你别无select,只能使用Stunnel,Pound或Nginx。 HA-Proxy不支持终止SSL本身。

或者,您可以在Web服务器上终止SSL。 在这种情况下,只需设置HA-Proxy即可通过TCP(HTTPS / 443)连接到您的Web服务器。 虽然记住在这种模式下,你将不能做任何L7检查或规则,这是什么使HA-Proxy如此强大。

您可以使用haproxy将SSL连接负载均衡到多个后端服务器,以便后端服务器终止SSL而不是haproxy。 唯一的窍门是在haproxy和后端服务器上启用代理协议,这样用户的真实IP地址就被保留了。

例如,如果您有两个nginx应用程序服务器10.0.0.1110.0.0.12以及一个haproxy负载平衡器10.0.0.10 。 编辑/etc/haproxy/haproxy.cfg添加这些行:

 frontend https-in bind *:443 default_backend https-servers backend https-servers mode tcp balance roundrobin server srv1 10.0.0.11:443 send-proxy server srv2 10.0.0.12:443 send-proxy 

用一个nginx服务器configuration如下:

 server { server_name example.com; root /opt/example/current/app; listen 443 ssl http2 proxy_protocol; set_real_ip_from 10.0.0.10/32; real_ip_header proxy_protocol; ssl_certificate /etc/ssl/example/ssl.crt; ssl_certificate_key /etc/ssl/example/ssl.key; location / { include uwsgi_params; uwsgi_pass unix:/tmp/app.sock; } } 

这告诉haproxy设置一个第4层代理,使用roundrobin将未经修改的所有TCP连接转发到两个nginx服务器以平衡连接。 nginx应用程序服务器将共享协商SSL和parsingHTTP请求的负载。 代理协议将始发客户端的IP地址从haproxy转发到nginx,而无需修改HTTP请求标头。 注意我们是如何告诉nginx信任你的haproxy负载平衡器10.0.0.10的IP地址给我们客户端的真实IP。 SSL分布在你的两个nginx应用服务器中,你的nginx日志文件为每个请求显示正确的客户端IP地址。

我写了一篇博客文章描述这个:

https://wakatime.com/blog/34-how-to-scale-ssl-with-haproxy-and-nginx