現在很多網站用了CDN技術,但采用CDN技術後很多人會發現原來用來獲取浏覽者的上網IP的程序不能正常使用了,它拿到的并不是浏覽者的真實上網IP,而是CDN節點的IP,這怎麽辦呢?其實非常簡單,隻需要對獲取IP的代碼作一(yī)點小(xiǎo)改動就可以了。
在沒有使用CDN前,我(wǒ)們如果想在網站程序裏拿到浏覽者的IP,隻需要讀取 REMOTE_ADDR 這個服務器變量就行了,而采用CDN後,REMOTE_ADDR 這個變量的值并不是浏覽者的上網IP,而是CDN節點的IP,而用戶的真實上網IP是放(fàng)在 HTTP_X_FORWARDED_FOR 這個變量裏的,既然這樣的話(huà),我(wǒ)們隻需要寫個兼容性的函數來獲取IP就行了,代碼如下(xià):
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. 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();
?>
3. asp.net 的示例代碼
<%@Page Language="C#"%>
<script runat='server'>
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());
}
</script>