我有一個httpd服務器配置爲處理HTTPS連接並將連接轉發到處理請求的Tomcat(通過http或ajp)。我在Tomcat服務器中的一個要求是記錄每個請求的遠程端口號。如果我直接點擊Tomcat,則直接檢索遠程端口號,我們正在使用getRemotePort()
函數(HttpServletRequest)來執行此操作。在HTTPD上檢索客戶端源端口 - > Tomcat設置
但是,由於我正在執行反向代理(通過HTTP/AJP轉發HTTPS請求),因此將創建一個新連接,並且始終會爲連接獲取遠程端口(以及遠程IP)我的httpd服務器到tomcat(除了當我使用AJP。在這種情況下,遠程服務器IP信息正確)。
我已經嘗試了httpd的不同配置,如:
ProxyPreserveHost On
ProxyPass/ajp://localhost:8009/
或
ProxyPreserveHost On
ProxyPass/http://localhost:8081/
我也玩過一點點用的RewriteRules,但不能讓事情工作。
閱讀httpd文檔,mod_proxy爲X-Forwarded-Host
,X-Forwarded-For
等提供了請求頭信息。但是沒有關於源端口的信息。
我已經even found a bug,顯然X-Forwarded-Port
屬性被添加到代理請求頭,但該代碼似乎沒有對主線/分支。
因此,總而言之,當HTTPD將請求轉發給Tomcat時,如何檢索客戶端的源端口(而不是反向代理)?
所以你得到遠程IP地址,但不是端口?另外,你可以傳遞tomcat/httpd的版本號。你發現的httpd錯誤是1.3版本的 – bubbly 2012-03-22 02:19:33
嗨凱文。我正在使用Apache httpd v 2.2.3和Tomcat 5.5 – alp 2012-03-22 18:35:25
X-Forwarded-For work? – bubbly 2012-03-22 19:49:41