我们正在努力在两台不同的 Windows Server 2012 计算机(我们称之为 VmA 和 VmB)上的两个 Apache 服务器之间设置负载平衡,目前我们使用mod_authnz_sspi
Windows 身份验证来对用户进行身份验证。VmA
托管负载平衡器和用于处理请求的辅助 HTTP 服务器,VmB
仅托管 HTTP 服务器。
我们遇到的问题是,它不会自动将凭据传递到辅助服务器,并且它始终会要求输入凭据(需要注意的是,如果您输入凭据,它将起作用,但这不是我们环境的选项)。此外,如果我们禁用 VmB
在服务器平衡中,并且只VmA
在平衡器中,它工作顺利。它只在作为虚拟机之间的代理工作时要求提供凭据。
这是我的httpd.conf
参考文件。
<Proxy "balancer://mycluster">
BalancerMember "http://VmAhostname:8080"
BalancerMember "http://VmBhostname:80"
</Proxy>
KeepAlive On
SetEnv proxy-initial-not-pooled
SetEnv proxy-chain-auth On
ProxyRequests On
ProxyVia On
ProxyPreserveHost On
ProxyPass "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"
任何援助将不胜感激
答案1
嘿伙计们,我们最终解决了这个问题。本质上最好的方法是从请求服务器中删除 NTLM 身份验证,并仅在平衡加载服务器上启用身份验证。然后,让反向代理服务器添加带有身份验证详细信息的请求标头。
如果你这样做,你将会需要确保请求服务器仅允许来自反向代理服务器的流量,否则任何人都可以向头注入用户名。
从请求服务器中删除身份验证后,只需将其添加到反向代理服务器:
RequestHeader set X-Remote-User expr=%{REMOTE_USER}
这样就行了!