This question already has answers here:
How do I get the remote address of a client in servlet?
                                
                                    (10个答案)
                                
                        
                                3年前关闭。
            
                    
有些我在一些通用类中有这个。

public static String getRequestIp (HttpServletRequest request){
  String ipaddr = request.getHeader("X-FORWARDED-FOR");
  if (ipaddr == null)ipaddr = request.getRemoteAddr();
  return ipaddr;
}


对于每个请求,我都会调用该方法,并在某个时刻将一条记录插入mysql数据库。

在大多数情况下,它可以正常工作,我可以在右侧字段中看到具有有效ip地址的每个请求的记录。但是有时IP应该存在的地方是这样的。 “未知,93.186.30.120”或“ 10.0.1.169,186.38.84.3”
Apache位于前端,侦听端口80,并用作侦听端口8081的Tomcat的代理。
我的路由器配置不允许传递80以外的任何端口发出的任何连接。
有帮助吗?
提前致谢。

最佳答案

X-FORWARDED-FOR HTTP标头的格式为:

X-Forwarded-For: client, proxy1, proxy2, ...


从而

unknown, 93.186.30.120


表示来自未知本地地址的来自93.186.30.120的代理的请求;和

10.0.1.169, 186.38.84.3


同样意味着来自本地IP 10.0.1.169的来自186.38.84.3代理的请求

07-26 03:14