Vmware-Esxi

HttpServletRequest.getRemoteAddr() 總是返回 127.0.0.1

  • April 21, 2015

我們正在嘗試確定特定請求來自我們的 Java 應用程序的何處。我們已更改日誌文件以包含 IP 地址,並且我們正在使用 httpServletRequest.getRemoteAddr() 來獲取該遠端地址。

在我們執行 Tomcat 的本地開發機器上,這是可行的。在我們的 CI 環境(Mac 上的 Tomcat)中,這是可行的。

問題是在我們的暫存和生產環境中,這不起作用。我們總是從 httpServletRequest.getRemoteAddr() 看到 127.0.0.1。我們的登台和生產環境都是執行 CentOS 的 VMware VM。它們在 ESXI 內部/之上執行,並且位於 Cisco 5500 ASA 之後。

我們已經看到與此問題類似的其他文章,說要查找“X-Forwarded-For”標頭並列印它(如果存在)。它沒有。以下是通過請求的標頭的完整列表。

我們對 ASA 或 VMware 的設置方式沒有太多了解,因此,如果存在可能導致此問題的原因,請提供詳細的答案,說明如何詢問我們的 IT 團隊以解決此問題。我們認為這可能與 VMware 有關,因為我們看到的是 127.0.0.1。如果是 ASA,我們會假設我們會看到 ASA 的 IP,但我願意被告知我不正確。

請求的完整標頭:

user-agent:Mozilla/5.0+(compatible; UptimeRobot/2.0; http://www.uptimerobot.com/)
accept:text/html,application/xhtml+xml,application/xml
q=0.9,*/*
q=0.8
accept-language:en-US,en
q=0.8
accept-charset:ISO-8859-1,UTF-8
q=0.7,*
q=0.7
host:host-omitted-for-stackoverflow.com
connection:keep-alive

更新 - 我們剛剛意識到我們涉及本地埠重定向:

唯一可能相關的是我們正在使用HTTP xinetd 埠重定向將 SSL 流量轉發到內部埠:

service https
{
   disable = no
   flags = REUSE
   socket_type = stream
   wait = no
   user = root
   port = 443
   protocol = tcp
   redirect = localhost 8999
   log_on_failure += USERID
}

事實證明,這是我們配置的 xinetd 部分正在執行此操作。我將結束這個問題並問另一個專門詢問這個問題的人。

可能網路配置文件設置不正確。可以在此處找到有關它們的更多詳細資訊:http: //docs.oracle.com/cd/E37670_01/E41138/html/ch11s02.html

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