七层代理服务器(例如DDoS高防)将用户的访问请求转发到后端服务器时,源站看到的请求来源默认是七层代理服务器(例如DDoS高防)的回源IP,而真实的请求来源IP被记录在HTTP头部的X-Forwarded-For
字段中,格式为X-Forwarded-For: 用户真实IP, 高防代理IP
。
如果访问请求到后端服务器间经过了一台以上代理服务器(例如经过WAF、CDN等代理服务器),则HTTP头部的X-Forwarded-For
字段记录了真实的请求来源IP和所有经过的代理服务器IP,格式为X-Forwarded-For: 用户真实IP, 代理服务器1-IP, 代理服务器2-IP, 代理服务器3-IP, …
。
因此,常见的Web应用服务器都可以通过X-Forwarded-For
字段的内容获取真实的请求来源IP。
针对不同的编程语言,常用的获取X-Forwarded-For
内容的方式如下:
ASP:
Request.ServerVariables(“HTTP_X_FORWARDED_FOR”)
ASP.NET(C#)
Request.ServerVariables[“HTTP_X_FORWARDED_FOR”]
PHP
`$_SERVER[“HTTP_X_FORWARDED_FOR”]
JSP
request.getHeader(“HTTP_X_FORWARDED_FOR”)
获取到X-Forwarded-For
字段的内容后,以英文逗号(,)作为分隔符,截取其中的第一个IP地址,即可获取真实的请求来源IP。