0

有些地方我在一些通用类中有这个。

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

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

在大多数情况下,它正常工作,我可以在正确的字段中看到每个请求的记录,其中包含有效的 IP 地址。但有时IP应该在哪里是这样的。"unknown, 93.186.30.120" or "10.0.1.169, 186.38.84.3" Apache 在前面监听端口 80 并用作监听端口 8081 的 Tomcat 的代理。我的路由器配置不允许传递任何连接通过 80 以外的任何端口。任何帮助?提前致谢。

4

2 回答 2

1

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

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

于 2012-07-01T21:11:31.323 回答
1

“未知” X-Forwarded-For 条目可能已由配置为不将原始客户端 IP 地址插入该字段的代理插入。

例如,Squid 配置指令 forwarded_for" 有各种选项,如果设置为 "on",将附加客户端 IP 地址。如果设置为 "off",它将显示为 "X-Forwarded-For: unknown"

于 2014-09-24T09:01:31.140 回答