x-forwarded-for的深度挖掘

來源:互聯網
上載者:User

如今利用nginx做負載平衡的執行個體已經很多了,針對不同的應用場合,還有很多需要注意的地方,本文要說的就是在通過CDN 後到達nginx做負載平衡時要求標頭中的X-Forwarded-For項到底發生了什麼變化。為簡單的web架構圖:

 

 

 

 

 

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

按照的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 參數設定:
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後會有兩種情況發生

1、如果從CDN過來的請求沒有設定X-Forwarded-For頭(通常這種事情不會發生),而到了我們這裡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

 

 

轉載:http://www.cnblogs.com/yihang/archive/2010/12/19/1910365.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.