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