使用 Haproxy 进行端到端 SSL 连接?

使用 Haproxy 进行端到端 SSL 连接?

我想知道当我想通过服务器建立 HTTPS 连接时 Haproxy 会如何反应。在 apache 中,我们有 aj_proxy 来与 tomcat 服务器建立 SSL 连接,那么如何使用 stunnel 来维护该功能。我们使用的是 Haproxy v1.4.13。我们的场景是,我们希望将证书放入 stunnel 并维护 HTTPS 会话。我们只是在后端使用纯 HTTP。因此,当我访问https://www.domain.com/login浏览器验证证书,但是在我登录后,它又是 HTTP,因为它从纯 HTTP tomcat 服务器获取内容。

那么有什么方法可以让我始终以 HTTPS 方式建立连接吗?以下是 stunnel 的配置文件:

sslVersion = all
options = NO_SSLv2
;Debug
debug = 7
output = /usr/local/etc/stunnel/stunnel.log
chroot = /var/tmp/stunnel

setuid = nobody
setgid = nobody
pid = /stunnel.pid

cert = /usr/local/etc/stunnel/stunnel.pem
;Some Performance Tunings

socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
[https]
client = noaccept = 10.12.12.1:443
connect = 10.12.12.1:84
xforwardedfor=yes
TIMEOUTclose = 0

Haproxy HTTPS 前端配置:

.
.
.
listen https 10.12.12.1:84
    mode http
cookie JSESSIONID prefix
balance roundrobin
option forwardfor except 10.12.12.1
option httpclose
option http-server-close
server S1   10.12.12.2:8080 cookie server1  maxconn 5000    check
server S2   10.12.12.3:8080 cookie server2  maxconn 5000    check
.
.

任何帮助都将受到高度赞赏。

答案1

我建议使用nginx前端/反向代理,stunnel并将所有流量从 http 重定向到 https。

我不确定是否stunnel可以处理 http 重定向。

答案2

最后我通过 stunnel 本身找到了解决方案。我在 tomcat server.xml 配置中添加了 RemoteIpValue 类。其中我提到了 internalProxies,如下所示:

... internalProxies="负载均衡器的 IP 地址列表" ...

就我而言:

internalProxies="10\.12\.12\.1"

相关内容