nginx作反向 Proxy時的HTTP請求處理全過程解釋

來源:互聯網
上載者:User

我用nginx作反向 Proxy,代理到百度(www.baidu.com),測試時在本地修改了host檔案。把www.baidu.com解析到nginxProxy 伺服器(74.91.23.207)上

# vim /etc/hosts

下面看一下nginx的設定檔段  (其中:server 115.239.210.27 是百度的伺服器位址)

接下來,在瀏覽器中輸入   www.baidu.com ,發送一個Http請求,ping一下可以看到它是向74.91.23.207發送的請求。

那麼請求到達74.91.23.207後,nginx是怎麼處理的呢

看一下wireshark抓的包 (Fliter : ip.src == 192.168.100.11 && http.host =="www.baidu.com"&&http.request.method =="GET")

結合上面的GET包資料解釋:

1.當HTTP請求交給Nginx處理時,首先Nginx會取出header頭中的Host (此處也就是 www.baidu.com),然後將其與所有的設定檔中的每個server段中的server_name進行匹配,以此決定到底有哪個server塊來處理這個請求。(當然有時也可能一個Host與多個server塊中的server_name都匹配,這時會根據匹配的優先順序選擇實際處理的server塊,優先順序這裡就不再細說。)

2.此時我們可以看出HTTP請求匹配到了中的server_name,這樣接下來nginx就會根據header中的Request URI欄位進行與location匹配,如上面設定檔的所示,匹配到了 location /   。

3.接下來繼續由nginx處理可以看到 proxy _pass  http://rocdn ;  這就是進行反向 Proxy處理,這個例子中使用的是nginx的upstream模組進行反向 Proxy實現。

4.通過proxy _pass  http://rocdn ; 中的 rocdn 可以找到對應的upstream塊,然後,可以根據其中的server 115.239.210.27:80;再次進行代理請求,

此時發送的GET包內容:Host欄位 and Request URI欄位 都和上面一樣,

5.當代理HTTP請求到達 百度的伺服器:115.239.210.27後,若百度也是nginx,則伺服器會對其進行類似上面的nginx處理HTTP請求一樣,進行server_name 和 location匹配,並將相應的請求資源返回Proxy 伺服器。

6.Nginx反向 Proxy伺服器接收到百度伺服器的返回資源後,再將其返回給用戶端瀏覽器。

以上就是Nginx作反響代理時HTTP請求與處理的大致流程。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.