Apache-2.2
跨多個代理傳遞客戶端 IP
我在 Apache httpd 伺服器前面有一個負載平衡器,它又在執行 Tomcat6 的伺服器前面。我們使用 Tomcat 來執行 Shibboleth 的 IdP。如下所示:
Client -> Load Balancer -> Apache httpd server (mod_proxy_ajp) -> Tomcat server
我希望將客戶端的 IP 傳遞給 Tomcat 伺服器。LB 將變數傳遞
ClientIP
給 httpd 伺服器,我可以在 httpd 的 LogFormat 中將其解析為"%{ClientIP}i"
,但這顯然不會到達 Tomcat 伺服器,而是 Tomcat 記錄了 LB 的 IP。我嘗試使用 Tomcat 的 RemoteIpValve 作為(in
server.xml
Insider<Engine>
):> <Valve className="org.apache.catalina.valves.RemoteIpValve" > remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" > protocolHeaderHttpsValue="https" />
希望使用不會成功
mod_proxy
傳遞IPX-Forwarded-For
。我在 上看過文章mod_rpaf
,但我希望在沒有額外的 apache httpd mods 的情況下做到這一點。我想我離把這一切綁在一起還差了幾塊,但又陷入了困境。有任何想法嗎?
如果負載均衡器將客戶端 IP 地址插入到名為 ClientIP 的標頭中,則 mod_proxy 應將其傳遞給 Tomcat 伺服器,而無需任何特殊配置。嘗試將 Tomcat RemoteIpValve 配置為查找ClientIP而不是X-Forwarded-For。例如
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="ClientIP" protocolHeaderHttpsValue="https" />