Nginx原始碼分析3 模組初始化

2021-08-20 16:49:50 字數 1899 閱讀 8449

直接跟** :

main -> 

ngx_preinit_modules(對模組名進行複製) ->

ngx_init_cycle(講模組物件複製到cycle裡面) -> ngx_cycle_modules

ngx_master_process_cycle ->

ngx_start_worker_processes ->

ngx_worker_process_cycle -> 

ngx_worker_process_init ->

cycle->modules[i]->init_process(cycle) (每個work程序中初始化這些模組)

1、ngx_preinit_modules

初始化所有模組,並對模組進行編號

ngx_int_ ngx_preinit_modules(void)

ngx_modules_n = i;

ngx_max_module = ngx_modules_n + ngx_max_dynamic_modules;

return ngx_ok;

}ngx_module_names分析 :

定義在ngx_module.h中

extern char          *ngx_module_names;     //乙個外部定義

生成原理 :

1. 具體的模組

可通過編譯前的

configure

命令進行配置,即設定哪些模組需要編譯,哪些不被編譯

。當編譯的時候,會生成ngx_modules.c的檔案,裡面就包含模組陣列。

2. 新增模組或者減少模組可以在

configure

命令執行前

auto/modules檔案裡面修改。

生成的objs/ngx_modules.c檔案如下:

2、ngx_init_cycle(講模組物件複製到cycle裡面) -> ngx_cycle_modules

初始化cycle,並初始化模組

ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle)

//在work程序初始化中, 會呼叫

cycle->modules模組的初始化函式

ngx_memcpy(cycle->modules, ngx_modules,

ngx_modules_n * sizeof(ngx_module_t *));

cycle->modules_n = ngx_modules_n;

return ngx_ok;

}3、work程序中init_process模組

ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker)}}

}    

nginx 原始碼分析

近期準備研究一下nginx原始碼,此處記錄一下。計畫 1 了解evan miller 的文章 2 了解nginx的組織架構 3 了解nginx的基本資料結構 4 熟悉nginx的主要module及執行機制,主要是core http event os 5 簡單的module開發及測試 一 準備 為了方...

nginx原始碼分析 從原始碼看nginx框架總結

nginx原始碼總結 1 中沒有特別繞特別彆扭的編碼實現,從變數的定義呼叫函式的實現封裝,都非常恰當,比如從函式命名或者變數命名就可以看出來定義的大體意義,函式的基本功能,再好的架構實現在編碼習慣差的人實現也會黯然失色,如果透徹理解 的實現,領悟架構的設計初衷,覺得每塊 就想經過耐心雕琢一樣,不僅僅...

Nginx原始碼閱讀(模組)

每個nginx模組,都是乙個ngx module t型別的變數。根據ngx module t的type,所有nginx模組可以分為5種型別 type ctx指向的資料結構 commands指向的資料結構 具體模組 ngx event core module等 ngx http core module...