反向代理受 NTLM 保护的网站
Reverse-proxying an NTLM-protected website
如何将请求代理到受 NTLM 保护的网站,例如 TeamFoundation 和 SharePoint?我不断收到 401 身份验证错误。
根据 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.
我的场景还有一件事;
如果双方(iis 服务器和 haproxy)都使用 ssl,则 iis 和 haproxy 服务器的 ssl 必须相同。否则,当你想从 haproxy 转到 iis 时,ntlm 不起作用。
也许可以帮助遇到同样问题的人。
如何将请求代理到受 NTLM 保护的网站,例如 TeamFoundation 和 SharePoint?我不断收到 401 身份验证错误。
根据 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.
我的场景还有一件事;
如果双方(iis 服务器和 haproxy)都使用 ssl,则 iis 和 haproxy 服务器的 ssl 必须相同。否则,当你想从 haproxy 转到 iis 时,ntlm 不起作用。
也许可以帮助遇到同样问题的人。