如何将请求代理到受NTLM保护的网站,例如 TeamFoundation 和 SharePoint ?我一直收到 401身份验证错误。
答案 0 :(得分:6)
根据this Microsoft TechNet article,你不能。
Microsoft NTLM使用有状态HTTP,这违反了HTTP / 1.1 RFC。它依赖于身份验证(涉及与几个初始401错误握手的事件)以及后续连接到通过从客户端到服务器的完全相同的连接来完成。这使得HTTP代理几乎不可能,因为每个请求通常会通过从打开的连接池中挑选的新连接或随机连接。它可以做到。
NGiNX显然通过“ntlm”选项支持这一点,但这是他们商业产品的一部分。 Apache HTTPD似乎有几个实验性补丁,但这需要重建Apache。 TinyProxy也不支持这一点。 HAProxy救援!
以下是运行配置的示例 - 它是一个使用单个后端服务器的相当简单的设置:
backend backend_tfs
server static teamfoundation.mycompany.com:8080 check maxconn 3
mode http
balance roundrobin
option http-keep-alive
option prefer-last-server
timeout server 30s
timeout connect 4s
frontend frontend_tfs
# You probably want something other than 127.0.0.1 here:
bind 127.0.0.1:8080 name frontend_tfs
mode http
option http-keep-alive
timeout client 30s
default_backend backend_tfs
这里的重要选项是 http-keep-alive 和 prefer-last-server 。
答案 1 :(得分:0)
我的场景还有另一件事;
如果双方都使用ssl(iis服务器和haproxy),则iis和haproxy服务器的ssl必须相同。否则,当您要从haproxy迁移到iis时,ntlm将无法正常工作。
也许可以帮助遇到相同问题的人。