我想知道当我想通过服务器建立 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"