現在很多網站用了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();