接入高防后如何让服务器程序获取用户真实访问IP

很多时候,我们的网站并不是简单的从用户的浏览器直达你的服务器的途径, 考虑到网站的访问速度、安全等属性,我们中间可能会加入高防IP高防CDN,或者是接入了反向代理模式下的其他的安全产品等。

以网站www.yunzhidian.com接入高防为例,它的流量途径可能是: 

普通用户浏览器  —–>  高防(防DDOS、 CC、Web攻击) ——>  源站服务器(PHP 程序部署在这里,iptables, nginx 安全配置)

那么问题来了,经过这么多层加速,服务器如何才能得到发起请求的真实客户端IP呢?

当一个透明代理服务器(如高防)把用户的请求转到后面服务器的时候,如果开启了www.yunzhidian.com的网站防护配置,那么高防会在 Http 的头中加入一个记录

X-Forwarded-For :  用户真实IP, 高防代理IP

如果中间经历了不止一个代理服务器,如经过了CDN等等,那么X-Forwarded-For可能会为以下的形式:

X-Forwarded-For :  用户IP, 代理服务器1-IP, 代理服务器2-IP, 代理服务器3-IP, ….

我们可以看到经过多层代理后, 请求用户的真实IP在第一个位置, 后面会跟一串中间代理服务器的IP地址,从这里取到用户真实的IP地址,针对这个 IP 地址做限制就可以了。那么如何获取X-Forwarded-For的内容?

常用的服务获取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地址即可。

相关新闻