现在很多网站用了CDN技术,但采用CDN技术后,原来用来获取访问源的IP地址的程序已不能正常使用,它拿到的并不是访问源的真实IP地址,而是CDN节点的IP地址,解决方法是对获取IP的代码作一点小改动。
在没有使用CDN之前,我们如果想在网站程序里拿到浏览者的IP,只需要读取 REMOTE_ADDR 这个服务器变量就行了,而采用CDN后,REMOTE_ADDR 这个变量的值并不是访问源的上网IP地址,而是CDN节点的IP地址,而用户的真实上网IP是放在 HTTP_X_FORWARDED_FOR 这个变量里的,既然这样,我们只需写个兼容性的函数来获取IP地址即可,代码示例如下:
1. asp 的示例代码
<% Function GetClientIP() Dim ip ip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") If(ip <> "") Then Dim arr arr = Split(ip,",") GetClientIP = arr(0) Else GetClientIP = Request.ServerVariables("REMOTE_ADDR") End if End function Response.Write("您的上网IP是:" + GetClientIP()) %>
2. asp.net 的示例代码
private string GetClientIP(){ string ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"] + ""; if(ip != ""){ string[] arr = ip.Split(','); return arr[0]; }else{ return Request.ServerVariables["REMOTE_ADDR"]; } } void Page_Load(){ Response.Write("您的上网IP是:" + GetClientIP()); }
3. php 的示例代码
function GetClientIP(){ $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; if($ip != ""){ $arr = explode(",",$ip); return $arr[0]; }else{ return $_SERVER["REMOTE_ADDR"]; } } echo "您的上网IP是:".GetClientIP();