天天看點

《深入了解Nginx:子產品開發與架構解析》一3.1 如何調用HTTP子產品

在開發http子產品前,首先需要了解典型的http子產品是如何介入nginx處理使用者請求流程的。圖3-1是一個簡化的時序圖,這裡省略了許多異步調用,忽略了多個不同的http處理階段,僅辨別了在一個典型請求的處理過程中主要子產品被調用的流程,以此幫助讀者了解http子產品如何處理使用者請求。完整的流程将在第11章中詳細介紹。

從圖3-1中看到,worker程序會在一個for循環語句裡反複調用事件子產品檢測網絡事件。當事件子產品檢測到某個用戶端發起的tcp請求時(接收到syn包),将會為它建立tcp連接配接,成功建立連接配接後根據nginx.conf檔案中的配置會交由http架構處理。http架構會試圖接收完整的http頭部,并在接收到完整的http頭部後将請求分發到具體的http子產品中處理。這種分發政策是多樣化的,其中最常見的是根據請求的uri和nginx.conf裡location配置項的比對度來決定如何分發(本章的例子正是應用這種分發政策,在第10章中會介紹其他分發政策)。http子產品在處理請求的結束時,大多會向用戶端發送響應,此時會自動地依次調用所有的http過濾子產品,每個過濾子產品可以根據配置檔案決定自己的行為。例如,gzip過濾子產品根據配置檔案中的gzip on|off來決定是否壓縮響應。http處理子產品在傳回時會将控制權交還給http架構,如果在傳回前設定了subrequest,那麼http架構還會繼續異步地調用适合的http子產品處理子請求。

《深入了解Nginx:子產品開發與架構解析》一3.1 如何調用HTTP子產品

開發http子產品時,首先要注意的就是http架構到具體的http子產品間資料流的傳遞,以及開發的http子產品如何與諸多的過濾子產品協同工作(第10章、第11章會詳細介紹http架構)。下面正式進入http子產品的開發環節。

繼續閱讀