免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
x-forward-for 取客戶端ip

如今利用nginx做負載均衡的實例已經很多了,針對不同的應用場合,還有很多需要注意的地方,本文要說的就是在通過CDN 后到達nginx做負載均衡時請求頭中的X-Forwarded-For項到底發(fā)生了什么變化。下圖為簡單的web架構圖:


nginx 負載均衡

先來看一下X-Forwarded-For的定義:
X-Forwarded-For:簡稱XFF頭,它代表客戶端,也就是HTTP的請求端真實的IP,只有在通過了HTTP 代理或者負載均衡服務器時才會添加該項。它不是RFC中定義的標準請求頭信息,在squid緩存代理服務器開發(fā)文檔中可以找到該項的詳細介紹。
標準格式如下:
X-Forwarded-For: client1, proxy1, proxy2
從標準格式可以看出,
X-Forwarded-For頭信息可以有多個,中間用逗號分隔,第一項為真實的客戶端ip,剩下的就是曾經經過的代理或負載均衡的ip地址,經過幾個就會出現(xiàn)幾個。

按照上圖的Web架構圖,可以很容易的看出,當用戶請求經過CDN后到達Nginx負載均衡服務器時,其X-Forwarded-For頭信息應該為 客戶端IP,CDN的IP 但實際情況并非如此,一般情況下CDN服務商為了自身安全考慮會將這個信息做些改動,只保留客戶端IP。我們可以通過php程序獲得X-Forwarded-For信息或者通過Nginx的add header方法來設置返回頭來查看。

下面來分析請求頭到達Nginx負載均衡服務器的情況;在默認情況下,Nginx并不會對X-Forwarded-For頭做任何的處理,除非用戶使用proxy_set_header 參數(shù)設置:
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

$proxy_add_x_forwarded_for變量包含客戶端請求頭中的"X-Forwarded-For",與$remote_addr用逗號分開,如果沒有"X-Forwarded-For" 請求頭,則$proxy_add_x_forwarded_for等于$remote_addr。

$remote_addr變量的值是客戶端的IP

當Nginx設置X-Forwarded-For等于$proxy_add_x_forwarded_for后會有兩種情況發(fā)生

1、如果從CDN過來的請求沒有設置X-Forwarded-For頭(通常這種事情不會發(fā)生),而到了我們這里Nginx設置將其設置為$proxy_add_x_forwarded_for的話,X-Forwarded-For的信息應該為CDN的IP,因為相對于Nginx負載均衡來說客戶端即為CDN,這樣的話,后端的web程序時死活也獲得不了真實用戶的IP的。

2、CDN設置了X-Forwarded-For,我們這里又設置了一次,且值為$proxy_add_x_forwarded_for的話,那么X-Forwarded-For的內容變成 ”客戶端IP,Nginx負載均衡服務器IP“如果是這種情況的話,那后端的程序通過X-Forwarded-For獲得客戶端IP,則取逗號分隔的第一項即可。

如上兩點所說,如果我們知道了CDN設置了X-Forwarded-For信息,且只有客戶端真實的IP的話,那么我們的Nginx負載均衡服務器可以不必理會該頭,讓它默認即可。

其實Nginx中還有一個$http_x_forwarded_for變量,這個變量中保存的內容就是請求中的X-Forwarded-For信息。如果后端獲得X-Forwarded-For信息的程序兼容性不好的話(沒有考慮到X-Forwarded-For含有多個IP的情況),最好就不要將X-Forwarded-For設置為 $proxy_add_x_forwarded_for。應該設置為$http_x_forwarded_for或者干脆不設置!

參考文章:http://en.wikipedia.org/wiki/X-Forwarded-For

另在不同的代理情況下,其中x-forward-for的情況

對于這三個值:REMOTE_ADDRHTTP_VIA、HTTP_X_FORWARDED_FOR  來說,可以分以下五種情況:

一、沒有使用代理服務器的情況:

      REMOTE_ADDR = 您的 IP
      HTTP_VIA = 沒數(shù)值或不顯示
      HTTP_X_FORWARDED_FOR = 沒數(shù)值或不顯示

二、使用透明代理服務器的情況:Transparent Proxies

      REMOTE_ADDR = 最后一個代理服務器 IP
      HTTP_VIA = 代理服務器 IP
      HTTP_X_FORWARDED_FOR = 您的真實 IP ,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   這類代理服務器還是將您的信息轉發(fā)給您的訪問對象,無法達到隱藏真實身份的目的。

三、使用普通匿名代理服務器的情況:Anonymous Proxies

      REMOTE_ADDR = 最后一個代理服務器 IP
      HTTP_VIA = 代理服務器 IP
      HTTP_X_FORWARDED_FOR = 代理服務器 IP ,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   隱藏了您的真實IP,但是向訪問對象透露了您是使用代理服務器訪問他們的。

四、使用欺騙性代理服務器的情況:Distorting Proxies

      REMOTE_ADDR = 代理服務器 IP
      HTTP_VIA = 代理服務器 IP
      HTTP_X_FORWARDED_FOR = 隨機的 IP ,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   告訴了訪問對象您使用了代理服務器,但編造了一個虛假的隨機IP代替您的真實IP欺騙它。

五、使用高匿名代理服務器的情況:High Anonymity Proxies (Elite proxies)

      REMOTE_ADDR = 代理服務器 IP
      HTTP_VIA = 沒數(shù)值或不顯示
      HTTP_X_FORWARDED_FOR = 沒數(shù)值或不顯示 ,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   完全用代理服務器的信息替代了您的所有信息,就象您就是完全使用那臺代理服務器直接訪問對象。

可參考原文:http://blog.sina.com.cn/s/blog_4a808e610100ajdh.html


本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C#獲取客戶端IP地址
php獲取客戶端真實IP 防止代理和作弊
php獲取IP
PHP獲得真實客戶端的真實IP REMOTE
nginx反向代理中proxy_set_header 運維筆記
9、Nginx反向代理
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服