我有很多tomcat服务器,它们运行相同的JSP应用程序和负载均衡器。我想知道客户端请求从哪个IP地址。我正在使用此代码:
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
代码request.getHeader("X-FORWARDED-FOR")
始终为null,request.getRemoteAddr()
始终从不同的客户端计算机返回相同的IP地址。有什么问题?
答案 0 :(得分:3)
你说,request.getHeader("X-FORWARDED-FOR") is always null
,你应该在load balancer
级别检查这个,可能是从那里修改的。
关于您的第二个问题request.getRemoteAddr() is always returning the same IP address from diffrent client machines
,如果您看到API Docs,则会明确指出此api调用会返回发送请求的client address or address of last proxy
,在您的情况下,它是{{ 1}}(我根据你的描述假设),这就是你收到相同IP地址的原因。
答案 1 :(得分:1)
An "X-FORWARDED-FOR" header 经常由位于客户端和Web服务器之间的代理,负载均衡器或反向代理插入。但是,这只是一个惯例/事实标准,而不是真正的标准。您的负载均衡器可能正在插入不同的标头,或根本没有标头。您需要检查负载均衡器的文档和/或配置。
request.getRemoteAddr()
返回的IP地址是请求来自的直接上游IP地址。它很可能是您的负载均衡器的IP地址,但在其他情况下,它可能是客户端代理或NAT服务器的IP地址。通常,您不能依赖它作为实际客户端IP地址。