nginx–基础–16–模块
1、怎么去理解nginx的模块?
- 通过官网
- 通过源代码
2、源代码
2.1、位置
进入这个路径
2.2、查看模块
vim ngx_modules.c
ngx_modules[],这个数组中是包含了所有编译进nginx中的模块
2.3、查看模块提供什么指令(ngx_http_gzip_filter_module模块为例)
01、进入存放模块的位置
cd /home/packages/nginx-1.14.2/src/http/modules
02、查看代码
vim ngx_http_gzip_filter_module.c
-
打开文件后,我们搜索ngx_command_t这样的一个结构体,它是每个模块里面唯一的;
-
ngx_command_t是一个数组
- 每一个成员是它所支持的指令名:
- 每个指令名后面携带的参数表示他可以跟几个参数,这个参数什么样的类型
3、nginx模块是如何被定义的?
3.1、ngx_module_t
- 用来说明每一个模块的结构体
- 这个结构体中有一个成员叫commands
- 是通用的模块
- 子模块:大模块里面的小模块
- 任何模块都必须遵循同样的规则,但每一类子模块它会重新定义一些新的规则。
- 可以定义模块的一个顺序
- index序号
- 这个模块的顺序决定有些模块如果跟其它模块是冲突的话,先生成的模块会阻碍后生成的模块发挥作用。
3.2、ngx_command_t
- 是个数组
- 每一个元素就是一个指令,以及它所处理的方法以及这些指令可以跟些什么样的参数
4、模块的分类
4.1、核心模块
- 这是核心模块
- 核心模块里面会有一类小核心模块,比如
- events,http,mail,stream
- 小核心模块本身会定义出新的类型模块.
4.2、ngx_conf_module模块
- 这个类型的模块只有一个
- 只负责去解析我们的nginx.conf文件
4.3、事件模块
- 处理所有事件
4.4、模块通用共性的部分
- 定义了所有子类型模块共同具有的一些特性
- 命名:模块名通常加上_core关键字
- 每一个core_module顺序一定是排名在第一位的
- 案例