我在Apache httpd服务器前有一个负载均衡器,而Apache服务器在运行Tomcat6的服务器前面。 我们使用Tomcat来运行Shibboleth的IdP。 以下是这样的:
Client -> Load Balancer -> Apache httpd server (mod_proxy_ajp) -> Tomcat server
我正在考虑将客户端的IP传递给Tomcat服务器。 LB将variablesClientIP
传递给httpd服务器,我可以在httpd的LogFormat中将其parsing为"%{ClientIP}i"
,但是这显然不会将其传递给Tomcat服务器,而是TomcatloggingLB的IP。
我已经尝试使用Tomcat的RemoteIpValve(在server.xml
内部的<Engine>
):
> <Valve className="org.apache.catalina.valves.RemoteIpValve" > remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" > protocolHeaderHttpsValue="https" />
希望mod_proxy
的使用能够通过X-Forwarded-For
的IP而没有成功。 我已经看过mod_rpaf
上的mod_rpaf
,但是我希望没有额外的apache httpd mods就可以做到这一点。
我想我是把这一切联系在一起的几件事,但是陷入了一种</s> </s>。 有任何想法吗?
如果负载均衡器将客户端IP地址插入名为ClientIP的头中,则mod_proxy应将其传递给Tomcat服务器,而不进行任何特殊configuration。 尝试configurationTomcat RemoteIpValve以查找ClientIP而不是X-Forwarded-For 。 例如
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="ClientIP" protocolHeaderHttpsValue="https" />