request部分
nginx中的http請求對應的資料結構是ngx_http_request_t,這是對乙個http請求的封裝。nginx通過它來儲存解析請求與輸出響應相關的資料。
乙個請求從ngx_http_init_request開始,設定讀事件 ngx_http_process_request_line。然後通過ngx_http_read_request_header來讀取請求的資料,呼叫ngx_http_parse_request_line函式來解析請求行。為了提高效率,1)用狀態機來解析請求行,2)將四個字元裝換成乙個整形來比較。
解析完請求行,nginx會設定讀事件handler為ngx_http_process_request_headers。headers_in是ngx_http_request_t的域,是乙個鍊錶結構,儲存所有的請求頭。http中有些請求是需要特別處理的,這些請求頭與請求處理函式存放在乙個對映表裡面,即ngx_http_headers_in,在初始化時,會生成乙個hash表,當每解析到乙個請求時,就會先在這個hash表中查詢,如果找到,就呼叫相應的處理函式來處理這個請求頭。
當nginx解析到兩個回車換行符時,就表示請求頭的結束,此時就會呼叫ngx_http_process_request來處理請求。ngx_http_process_request會設定當前連線的讀寫事件處理函式為ngx_http_request_handler,這個函式中會根據當前事件是讀還是寫分別呼叫read_event_handler或者write_event_handler。nginx的做法是先不讀取請求body,所以設定read_event_handler為ngx_http_block_reading,即不讀取資料了。然後在ngxz_http_handler裡面會設定write_event_handler為ngx_http_core_run_phases,並執行。nginx將乙個http請求的處理分為多個階段,這個函式就執行這些階段來產生資料。產生的相應頭會放在ngx_http_request_t中的headers_out中。
nginx的各種階段會對請求進行處理,最後會呼叫filter來過濾資料,對資料進行加工。filter是乙個鍊錶結構,分別有header filter 和body filter,其中header filter的最後乙個filter,即ngx_http_header_filter,這個filter將會遍歷所有的相應頭,最後輸出需要的響應頭在乙個連續的記憶體,然後呼叫ngx_http_write_filter進行輸出。body的情況類似。
keep-alive
pipe
lingering_close
Nginx從入門到精通
1 nginx配置檔案載入機制 採用nginx s reload命令載入nginx的配置檔案,master程序讀取配置檔案,建立新的worker程序,向老的worker程序傳送shutdown命令。老的worker程序不再接受新的請求,待老的請求處理完成後,就會停掉。2 location匹配機制 當...
Nginx開發從入門到精通
更新歷史 日期描述 2012 03 01 建立目錄大綱 2012 03 28 增加了樣章 2012 05 25 更新樣章 2012 06 08 增加第5章 2012 06 11 增加第4章 2012 06 26 增加第6章 event module 2012 06 27 更新第5章部分內容 2012...
Nginx開發從入門到精通
nginx開發從入門到精通 nginx平台初探 100 基本資料結構 99 nginx的配置系統 100 nginx的模組化體系結構 模組概述 nginx的請求處理 handler模組 100 handler模組的基本結構 handler模組的掛載 handler的編寫步驟 示例 hello han...