相信大家在看了前一章的模塊概述以后,都對 Nginx 的模塊有了一個基本的認識。基本上作為第三方開發(fā)者最可能開發(fā)的就是三種類型的模塊,即 handler,filter 和 load-balancer。Handler 模塊就是接受來自客戶端的請求并產(chǎn)生輸出的模塊。有些地方說 upstream 模塊實際上也是一種 handler 模塊,只不過它產(chǎn)生的內(nèi)容來自于從后端服務器獲取的,而非在本機產(chǎn)生的。
在上一章提到,配置文件中使用 location 指令可以配置 content handler 模塊,當 Nginx 系統(tǒng)啟動的時候,每個 handler 模塊都有一次機會把自己關聯(lián)到對應的 location上。如果有多個 handler 模塊都關聯(lián)了同一個 location,那么實際上只有一個 handler 模塊真正會起作用。當然大多數(shù)情況下,模塊開發(fā)人員都會避免出現(xiàn)這種情況。
handler 模塊處理的結果通常有三種情況: 處理成功,處理失?。ㄌ幚淼臅r候發(fā)生了錯誤)或者是拒絕去處理。在拒絕處理的情況下,這個 location 的處理就會由默認的 handler 模塊來進行處理。例如,當請求一個靜態(tài)文件的時候,如果關聯(lián)到這個 location 上的一個 handler 模塊拒絕處理,就會由默認的 ngx_http_static_module 模塊進行處理,該模塊是一個典型的 handler 模塊。
本章主要講述的是如何編寫 handler 模塊,在研究 handler 模塊編寫之前先來了解一下模塊的一些基本數(shù)據(jù)結構。