接入高防後(hòu)如何讓服務器程序獲取用戶真實訪問IP

很多時候,我們的網站并不是簡單的從用戶的浏覽器直達你的服務器的途徑, 考慮到網站的訪問速度、安全等屬性,我們中間可能(néng)會加入高防IP高防CDN,或者是接入了反向(xiàng)代理模式下的其他的安全産品等。

以網站www.yunzhidian.com接入高防爲例,它的流量途徑可能(néng)是: 

普通用戶浏覽器  —–>  高防(防DDOS、 CC、Web攻擊) ——>  源站服務器(PHP 程序部署在這(zhè)裡(lǐ),iptables, nginx 安全配置)

那麼(me)問題來了,經(jīng)過(guò)這(zhè)麼(me)多層加速,服務器如何才能(néng)得到發(fā)起(qǐ)請求的真實客戶端IP呢?

當一個透明代理服務器(如高防)把用戶的請求轉到後(hòu)面(miàn)服務器的時候,如果開(kāi)啓了www.yunzhidian.com的網站防護配置,那麼(me)高防會在 Http 的頭中加入一個記錄

X-Forwarded-For :  用戶真實IP, 高防代理IP

如果中間經(jīng)曆了不止一個代理服務器,如經(jīng)過(guò)了CDN等等,那麼(me)X-Forwarded-For可能(néng)會爲以下的形式:

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

我們可以看到經(jīng)過(guò)多層代理後(hòu), 請求用戶的真實IP在第一個位置, 後(hòu)面(miàn)會跟一串中間代理服務器的IP地址,從這(zhè)裡(lǐ)取到用戶真實的IP地址,針對(duì)這(zhè)個 IP 地址做限制就可以了。那麼(me)如何獲取X-Forwarded-For的内容?

常用的服務獲取X-Forwarded-For字段内容可通過(guò)如下方式:

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的相關内容後(hòu),那麼(me)以“,”作爲區分符截取其中的第一個IP地址即可。

相關新聞