首頁  >  文章  >  運維  >  nginx如何處理http請求

nginx如何處理http請求

(*-*)浩
(*-*)浩原創
2019-06-04 16:20:476028瀏覽

nginx處理http的請求是nginx最重要的職能,也是最複雜的一部分。可以大概說下執行流程:

nginx如何處理http請求

請求頭讀取;

##解析請求行;

解析請求頭;

讀取請求體;

開始最重要的部分,即多階段處理; nginx把請求處理分割成了11個階段,也就是說當nginx讀取了請求行和請求頭之後,將請求封裝了結構體ngx_http_request_t,然後每個階段的handler都會根據這個ngx_http_request_t,對請求進行處理,例如重寫uri,權限控制,路徑查找,生成內容以及記錄日誌等等;

#將結果傳回給客戶端;

#ngx_http_process_request_line函數的主要作用即是解析請求行,同樣由於涉及到網路IO操作,即使是很短的一行請求行可能也不能被一次讀完,所以在之前的ngx_http_init_request函式中,ngx_http_process_request_line函式被設定為讀取事件的處理函數,它也只擁有一個唯一的ngx_event_t *類型參數,並且在函數的開頭,同樣需要判斷是否是超時事件,如果是的話,則關閉這個請求和連接;否則開始正常的解析流程。先呼叫ngx_http_read_request_header函數讀取資料。

多階段處理是nginx模組最重要的部分,因為第三方模組也是註冊在這;


例如有人寫了一個利用nginx和memcache做頁面快取的第三方模組,也可以把memcache換成redis集群等等;

而且nginx多階段處理有點類似python和golang web框架的中間件,後者主要是用裝飾器模式,對handler一層一層封裝,而nginx是用數組(鍊錶)形式組合多階段handler,然後按handler鍊錶執行即可;

客戶端發送過的統一資源定位符(url)對應伺服器上某一路徑上的資源,web伺服器需要做的只是將url映射到本地檔案系統的路徑,然後讀取對應檔案並返回給客戶端。但這只是最初的網路的需求,而如今網路出現了各種複雜的需求,要求web伺服器能夠處理諸如安全及權限控制,多媒體內容和動態網頁等等問題。這些複雜的需求導致web伺服器不再是一個短小的程序,而變成了一個必須經過仔細設計,模組化的系統。

nginx良好的模組化特性體現在其對請求處理流程的多階段劃分當中,多階段處理流程就好像一條管線,一個nginx程序可以並發的處理處於不同階段的多個請求。 nginx允許開發者在處理流程的任意階段註冊模組,在啟動階段,nginx會把各個階段註冊的所有模組處理函數依序的組織成一條執行鏈。

更多Nginx相關技術文章,請造訪

Nginx使用教學欄位進行學習!

以上是nginx如何處理http請求的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn