現(xiàn)在很多網(wǎng)站用了CDN技術(shù),但采用CDN技術(shù)后,原來(lái)用來(lái)獲取訪問(wèn)源的IP地址的程序已不能正常使用,它拿到的并不是訪問(wèn)源的真實(shí)IP地址,而是CDN節(jié)點(diǎn)的IP地址,解決方法是對(duì)獲取IP的代碼作一點(diǎn)小改動(dòng)。
在沒(méi)有使用CDN之前,我們?nèi)绻朐诰W(wǎng)站程序里拿到瀏覽者的IP,只需要讀取 REMOTE_ADDR 這個(gè)服務(wù)器變量就行了,而采用CDN后,REMOTE_ADDR 這個(gè)變量的值并不是訪問(wèn)源的上網(wǎng)IP地址,而是CDN節(jié)點(diǎn)的IP地址,而用戶(hù)的真實(shí)上網(wǎng)IP是放在 HTTP_X_FORWARDED_FOR 這個(gè)變量里的,既然這樣,我們只需寫(xiě)個(gè)兼容性的函數(shù)來(lái)獲取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("您的上網(wǎng)IP是:" + GetClientIP())
%>
2. asp.net 的示例代碼
<%@Page Language="C#"%>
3. php 的示例代碼
function GetClientIP(){
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
if($ip != ""){
$arr = explode(",",$ip);
return $arr[0];
}else{
return $_SERVER["REMOTE_ADDR"];
}
}
echo "您的上網(wǎng)IP是:".GetClientIP();
?>