Apache-2.2

跨多個代理傳遞客戶端 IP

  • June 14, 2013

我在 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.xmlInsider <Engine>):

> <Valve className="org.apache.catalina.valves.RemoteIpValve"   
> remoteIpHeader="X-Forwarded-For"    protocolHeader="X-Forwarded-Proto"
> protocolHeaderHttpsValue="https" />

希望使用不會成功mod_proxy傳遞IP X-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" />

引用自:https://serverfault.com/questions/515707