我们正在尝试识别 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
}
答案1
可能是网络配置文件设置不正确。有关它们的更多详细信息请参见此处:http://docs.oracle.com/cd/E37670_01/E41138/html/ch11s02.html
答案2
事实证明,这是我们配置中的 xinetd 部分造成的。我要关闭这个问题,然后问另一个专门询问这个问题的问题。