我们已成功部署 HAProxy 作为所有基于 Exchange 2013 SP1 HTTP 的流量(自动发现、OWA、EXP、EWS、MAPI 等)的 4 层负载均衡器。
然而,由于各种原因,我们正在考虑转向第 7 层“SSL 卸载”架构。
我们的大部分配置都基于优秀的 ALOHA 指南:https://www.haproxy.com/static/media/uploads/eng/resources/aloha_load_balancer_appnotes_0065_exchange_2013_deployment_guide_en.pdf
好消息是,几乎所有东西都运行正常。我们唯一的问题是 MAPI,即 Exchange 2013 SP1 中引入的 RPC 替代品。
据我所知,Exchange 2013 支持 MAPI 的 SSL 卸载 - 请参阅http://blogs.technet.com/b/rmilne/archive/2014/02/25/exchange-2013-sp1-released.aspx。ALOHA 文档建议不要对 MAPI 使用第 7 层 SSL 卸载,但这纯粹是由于性能问题,而不是任何技术原因。
如果我们尝试对 MAPI 进行负载平衡,那么我们看到的症状是
- /mapi/HealthCheck.htm URL 可以在 Web 浏览器中正常返回
- 然而,Outlook 客户端反复要求输入凭据
HAProxy 配置的相关部分如下(不是整个文件)
frontend ft_exchange_2013_https
bind 1.1.1.3:443 ssl crt /blah/blah.pem
capture request header Host len 32
capture request header User-Agent len 64
capture response header Content-Length len 10
maxconn 10000
acl ssl_connection ssl_fc
acl host_mail hdr(Host) -i mail.company.com
acl path_slash path /
acl path_mapi path_beg -i /mapi
http-request deny if path_check
http-request redirect scheme https code 302 unless ssl_connection
http-request redirect location /owa/ code 302 if path_slash host_mail
use_backend bk_exchange_2013_https_mapi if path_mapi
backend bk_exchange_2013_https_mapi
option httpchk GET /mapi/HealthCheck.htm
http-check expect string 200\ OK
timeout server 600s
server SERVER1 1.1.1.1:443 maxconn 2000 weight 10 check ssl verify none
server SERVER2 1.1.1.2:443 maxconn 2000 weight 10 check ssl verify none
我们为解决这个问题所尝试做的事情是
- 通过删除 MAPI IIS 虚拟目录上的“需要 SSL”标志并在 SERVER1 和 SERVER2 行上使用端口 80 而不是 443,在后端使用 HTTP 而不是 HTTPS
- 删除一个后端服务器,以便所有请求都转到单个服务器
- 将 MAPI 虚拟目录的身份验证设置从默认的“协商”更改为“NTLM”
但是,这些都没有解决问题。如果有人对如何进一步诊断有任何想法,或者有可行的配置,他们可以分享,例如 HAProxy 配置 + Exchange MAPI 虚拟目录配置,那就太好了!!
编辑1
我还设法重现了 Outlook 的行为,方法是:https://mail.company.com/mapi/emsmdb它会反复提示输入与 Outlook 相同的凭据