HttpServletRequest.getRemoteAddr()总是返回127.0.0.1

我们试图确定哪些特定请求来自我们的Java应用程序内部。 我们更改了日志文件以包含IP地址,并使用httpServletRequest.getRemoteAddr()来获取该远程地址。

在运行Tomcat的本地开发机器上,这是可行的。 在我们的CI环境(Mac上的Tomcat)中,这是有效的。

问题是,在我们的舞台和生产环境中,这是行不通的。 我们总是从httpServletRequest.getRemoteAddr()中看到127.0.0.1。 我们的临时和生产环境都是运行CentOS的VMware虚拟机。 他们在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 

更新 – 我们刚刚意识到我们有一个本地端口redirect涉及:

唯一可能相关的是我们使用HTTP xinetd端口redirect将SSLstream量转发到内部端口:

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

可能networkingconfiguration文件没有正确设置。 有关它们的更多细节可以在这里find: http : //docs.oracle.com/cd/E37670_01/E41138/html/ch11s02.html

事实certificate,这是我们configuration的xinetd部分。 我要结束这个问题,并且另外问一个问题。