Ian*_*kem 5 ssl tcp haproxy sticky-sessions
当 SSL 必须在后端服务器上终止时,我们如何在 HAProxy 中实现会话粘性?我们需要粘性,因为后端无法共享会话。
这是我原来的配置:
# SSL passthrough
listen https_handler
bind 1.2.3.4:443
mode tcp
balance leastconn
stick match src
stick-table type ip size 200k expire 30m
server s1 1.1.1.1:443
server s2 1.1.1.2:443
# haproxy logs (not sticking)
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.396] fe BACKEND_Website/s1 37/0/1/3/41 200 8364
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.456] fe BACKEND_Website/s1 36/0/1/1/39 200 9082
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.456] fe BACKEND_Website/s2 35/0/1/3/39 200 2529
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.545] fe BACKEND_Website/s1 35/0/0/3/38 200 1460
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.501] fe BACKEND_Website/s2 36/0/1/1/109 200 376
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.545] fe BACKEND_Website/s1 36/0/1/1/74 200 2298
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.604] fe BACKEND_Website/s1 35/0/1/2/38 200 5542
Run Code Online (Sandbox Code Playgroud)
下面的配置是我尝试阅读的src
:
这会导致 502 Bad Gateway 错误。我认为,这是因为流量在到达后端时已经被解密。
# terminate SSL at HAProxy
listen https_handler
bind 1.2.3.4:443 ssl crt /etc/ssl/certs/certs.pem
mode tcp
balance leastconn
stick match src
stick-table type ip size 200k expire 30m
server s1 1.1.1.1:443
server s2 1.1.1.2:443
Run Code Online (Sandbox Code Playgroud)
请注意,我已将证书插入到绑定中。这是为了让 HAProxy 能够读取 src 并设置 Stick-table。(不确定这是否正确。)此时,流量已经解密。
我认为问题在于当解密的流量传递到需要加密流量的后端服务器时......
我看过这些建议:
send-proxy
指令和X-Forward-Proto
标头。- 但意识到这也需要一个纯 HTTP 后端。将不胜感激任何建议。
最简单的解决方案是使用balance source
,但如果许多客户端来自同一个 IP,这对您的后端服务器可能不太公平。
有关实现此目的的方法的更多讨论,请参阅http://blog.haproxy.com/2013/04/22/client-ip-persistence-or-source-ip-hash-load-balancing/ 。
归档时间: |
|
查看次数: |
46164 次 |
最近记录: |