Author: haoransun
Wechat: SHR—97
学习来源:极客时间-Nginx核心知识100讲,本人购买课程后依据视频讲解汇总成个人见解。
前言
Nginx之所以有如此多的特性,是因为有大量的第三方开发者在为它开发模块。Nginx之所以有这么丰富的生态圈,是因为它的模块设计十分优良。如TCP协议一样,从上个世纪70年代设计至今,没有做过大的变动。Nginx同样如此,从2004年发布后,没有发生过大的变化。
Nginx模块就是什么?
Nginx开源文档,如 gzip模块文档中,会有它的用法以及内置变量等。Nginx-gzip
有的第三方模块没有详细说明,可到 安装模块中查找
1 | cd /usr/local/geek/nginx/nginx-1.16.0 |
如 gzip模块已经被加载进来,每一个模块在 */usr/local/geek/nginx/nginx-1.16.0/src/http/modules
*中都会有对应的 .c文档
1 | vim ngx_http_gzip_filter_module.c |
在每一个源文件中,都会由 ngx_command_t 这样一个唯一的结构体。
该结构体是一个数组,其中的元素是它所支持的指令名,参数名、参数类型等等参考文档。
Nginx模块
Nginx模块的分类
针对不同的应用场景,Nginx会细分为不同的子模块。在特定的复杂的应用场景下,这些子模块会增加许多新的特性和功能。
Nginx模块分类
/usr/local/geek/nginx/nginx-1.16.0/src目录下
core目录:仅仅是Nginx的核心框架代码,并不是Nginx的 Core Module。
event、http、mail、stream则是对应的子类型模块。
以最复杂的http为例
1 | vim ngx_http.c |
官方提供的都是在上述目录下,非官方提供的在 modules目录下。
上述模块大概分为 3 类:
处理请求、生成响应 + 响应过滤 + 与上游服务器交互(负载均衡等工作)
响应过滤的名称有filter关键字。
与上游服务器交互的有upstream关键字。
其它模块都是生成响应或为生成响应而工作的。