nginx 模組的理解以及劃分

2021-06-21 16:05:19 字數 3142 閱讀 6384

看了深入理解nginx 第八章 nginx基礎架構之後,對整個nginx的模組還是有了比較清晰的認識。所以在這裡總結一下。

要知道整個nginx有哪些模組,關鍵就是知道在nginx裡面是如何定義乙個模組的。那就是

這個結構體,所以,只要是乙個模組需要使用ngx_module_t對其對應。我覺得我可以使用這個作為關鍵字在整個文件中作乙個搜尋,那麼我就知道到底一共有哪些模組了。如下圖所示:

我們已經看到一些模組的結構體了。比如,ngx_epoll_module模組,這就是事件模組中使用epoll機制的模組。我昨天還翻譯相關linux手冊中的對epoll的解釋。

當然,很多模組都是我們不常用的,那麼如果我想要知道有哪些模組是常用的呢?

我建議去看官網看看手冊:

在頁面最下面的modules reference部分,就是對一些模組的解釋和配置方式的講解,所以我認為其應該是在nginx這個伺服器上比較常用的模組。當然,這是從配置的角度,而不是從原始碼的角度。

另外乙個問題就是在這次執行的nginx中有哪些模組被載入了呢?

在之前的學習中,我們知道,在編譯之後,可以查閱

~/documents/nginx-1.2.9/objs/ngx_modules.c
得知在此次nginx的二進位制檔案中有哪些檔案被載入了。如果你自己新增了新的模組,那麼在這裡面也可以看見。

知道了如何檢視有哪些模組,下乙個問題就是如何知道哪些模組,有哪些功能了。所以這裡非說說ngx_module_t不可。注意只要是nginx裡面的乙個模組,就肯定會使用ngx_module_t結構體來表明其作為模組的一些資訊。

這就意味著模組的劃分。當然,具體某乙個小模組是幹什麼的,恐怕還需要具體的分析。

書中已經把nginx的模組劃分講述的非常清楚了。我們來看看下面這張圖:

很清楚,我看到一共分為了五個模組,而每個大模組下面包含了很多子模組,可以看出他們都是以功能為單位而集合在一起的。含義也非常明確。比如核心模組,那麼必然是整個nginx的核心所在。而配置模組,顯然是為了解析配置檔案而存在的。核心模組與其他功能模組都具有著關係。

從圖中可以看出,核心模組內都有乙個子模組是與另乙個功能模組相關的,比如,http模組和核心模組中的ngx_http_module是相關的。ngx_http_module作為核心模組的一部分,完成的主要功能是:ngx_http_module完成的功能主要在核心模組內定義http模組,同樣,ngx_events_module模組也是在核心模組內定義整個events模組。

此外,在每乙個功能模組內又有乙個小的核心模組,名字中都帶有core,就是上圖中,黑框部分,比如

mail功能模組的核心模組:ngx_mail_core_module

http功能模組的核心模組:ngx_http_core_module

event功能模組的核心模組:ngx_event_core_module

這三個小的核心模組完成相對應的所有的功能模組的載入。比如ngx_http_core_module就是負責去載入ngx_http_up_stream_module。而ngx_event_core_module就要負責載入ngx_epoll_module模組。

看ngx_module_s結構體內:

struct ngx_module_s ;
就像注釋中所說的那樣,一類模組有自己單獨的上下文。如下圖所示,這張展現了針對不同型別的模組,其ctx應該是怎樣乙個結構體。

struct ngx_module_s ;
光這樣看,很難知道這幾個函式到底在什麼時候被呼叫了,作者用了很棒的流程圖來表示。

只看init_module的方法:

從**的角度來看,**如下:

ngx_cycle_t *

ngx_init_cycle(ngx_cycle_t *old_cycle)}}

...}

正常情況下,ngx_init_cycle函式是被main函式呼叫的。那麼還有一點值得注意,那就是在以不關閉nginx的方式重讀配置檔案的時候,那麼ngx_init_cycle也會在

ngx_master_process_cycle(cycle);

或者ngx_single_process_cycle(cycle);

裡面呼叫。

具體是上面哪個函式,取決於nginx被啟動的方式,如何ngnix是在single模式下啟動,也就是master和worker程序是同乙個的情況下,那麼就是ngx_single_process_cycle(cycle);

對於:exit_process和exit_master函式呼叫的地方,書上也有圖,如下兩幅:

目前看是來有一點點複雜,我們每一次都知道圖中每一框的**。那麼慢慢對nginx就和無比熟悉。

想了想,大概就說怎麼多吧。這只是乙份自己學習的總結。

nginx的gzip模組詳解以及配置

1 gzip模組作用 gzip這個模組無論在測試環境還是生產環境都是必須要開啟,這個模組能高效的將頁面的內容,無論是html或者css js亦或是等都可以進行壓縮,節省了頻寬資源,也提高了 的載入速度,給瀏覽者帶來更優質的服務。2 啟用gzip 只要在nginx的配置檔案nginx.conf中去配置...

nginx 配置以及各模組使用介紹

nginx 中文文件 nginx在做反向 時,提供效能穩定,並且能夠提供配置靈活的 功能。nginx可以根據不同的正則匹配,採取不同的 策略,比如檔案結尾的走檔案伺服器,動態頁面走web伺服器,只要你正則寫的沒問題,又有相對應的伺服器解決方案,你就可以隨心所欲的玩。並且nginx對返回結果進行錯誤頁...

模組化的理解,以及模組化的好處

先理解模組 在程式設計中,為完成某一功能所需的一段程式或子程式 或指能由編譯程式 裝配程式等處理的獨立程式單位 或指大型軟體系統的一部分。可以這樣理解每乙個頁面中的部分都可以看成乙個模組。模組化是指解決乙個複雜問題時自頂向下逐層把系統劃分成若干模組的過程,有多種屬性,分別反映其內部特性。是指將每乙個...