jsp从servlet请求java获取客户端IP地址
我有许多tomcat服务器,它们运行相同的JSP应用程序和负载平衡器。我想知道客户端请求来自哪个IP地址。我正在使用以下代码:
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
代码request.getHeader("X-FORWARDED-FOR")
始终为空,并且request.getRemoteAddr()
始终从不同的客户机返回相同的IP地址。有什么问题
# 1 楼答案
An "X-FORWARDED-FOR" header通常由位于客户端和web服务器之间的代理、负载平衡器或反向代理插入。然而,这只是一个惯例/事实标准,不是真正的标准。负载平衡器可能插入了不同的头,或者根本没有头。您需要检查负载平衡器的文档和/或配置
由
request.getRemoteAddr()
返回的IP地址是请求来自的直接上游IP地址。它很可能是负载平衡器的IP地址,但在其他情况下,它可能是客户端代理或NAT服务器的IP地址。一般来说,您不能指望它是实际的客户端IP地址# 2 楼答案
你说,
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
,而在您的情况下,它是load balancer
(我根据您的描述假设),这就是您接收相同IP地址的原因