【nginx 模块分析】

nginx 模块分析

继承上一篇nginx安装流程,我们已经成功安装好nginx,对于nginx来说,最重要的莫过于是nginx的模块分析,这些就是nginx的模块,当然因为我们只指定了–with-debug,下面的其实也就是nginx的默认模块,然后比较多,没截完,可以自己看一下哈,

模块列表

进入nginx下面的objs目录,文件ngx_modules.c
在这里插入图片描述
然后查看模块,如下图所示:

在这里插入图片描述

模块结构体

ngx_module_t

从vscode中点击ngx_module_t会发现其实是 ngx_module_s
在这里插入图片描述
继续点击ngx_module_s,查看这个结构体。
在这里插入图片描述

接下来来分析主要一些结构

ctx_index

index

这两个其实都是模块的标志位,后面用到会说到,至于定义的ngx_uint_t 其实就是nginx定义的类型,如图
在这里插入图片描述
在这里插入图片描述

*name

其实就是当前模块的名称

*ctx

可以看到类型是任何类型都可以,存放模块的一些基本的信息。

*commands

是当前模块会使用到的一些涉及到的命令,我们先看一下ngx_command_t的结构

ngx_command_t

在这里插入图片描述

name

当前命令的名称

type

当前命令的类型。

*(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)

当前commad填充配置文件的操作方法,相当于go里面的interface和java里面的抽象类。当说到commad的实现的时候我们会说到

init_master,init_module,init_process等这几个过程,其实后面的成员,(*init_master)(ngx_log_t *log)就是相当于申明了一个名称为init_master,参数为ngx_log_t *log,返回值为ngx_uint_t 的函数,相当于go里面的interface和java里面的抽象类。

init_master

init_master,init_module,init_process等这几个过程,其实后面的成员,(*init_master)(ngx_log_t *log)就是相当于申明了一个名称为init_master,参数为ngx_log_t *log,返回值为ngx_uint_t 的函数,相当于go里面的interface和java里面的抽象类。这个我们会结合具体的模块分析,并且在用到的时候具体问题具体分析。

至于后面的spark_hook0-spark_hook7,看一下作用不大,后面如果有,我们在这边加上

接下来我们用第一个模块也是核心的模块去做示例,也就是ngx_core_module

模块实例

ngx_core_module

首先我们来看定义
在这里插入图片描述
首先我们来看一下第一项也就是NGX_MODULE_V1
在这里插入图片描述
可以看到
NGX_MODULE_V1 后面是跟随了7项,正好每个对应了ngx_module_s 中国的前面七个,分别是ctx_index到*signature,第一个NGX_MODULE_UNSET_INDEX ,定义的类型是(ngx_uint_t) -1
在这里插入图片描述
而ngx_uint_t 就是 unsigned long ,所以差不多就是当前系统最大的数字了。其他的都比较简单了,就不细说了,感兴趣的可以自己点击跳转看一下哈,

ngx_core_module_ctx

这个是对应着ngx_module_s 中的*ctx,类型是void,接下来看看ngx_core_module_ctx的这个结构,这个结构
在这里插入图片描述
这个static的这个修饰,其实代表的是局部,别的文件将会无法引入。
接下来再看看ngx_core_module_t这个结构体。
在这里插入图片描述
其实也是比较的简单,其实就是名称,然后接下来的变量从字面意思上面理解就是创建配置文件和初始化配置文件,当然具体作用我们后面再说,

ngx_core_commands

接下来我们点进去看一下长什么样子,这个是一个ngx_command_t的一个结构体数组,至于ngx_command_t上面说了哈。
在这里插入图片描述

再看看我们此时的配置文件,也就是我们nginx启动时候读取的文件,cat /usr/local/nginx/conf/nginx.conf
在这里插入图片描述
仔细看是不是配置文件中的user,worker_process在ngx_core_commands中是可以找到对应的存在。

而对于在ngx_conf_set_flag_slot,ngx_conf_set_msec_slot其实就是读取到配置后对于配置文件也就是ngx_conf_t的一些操作.

ngx_errlog_module

这个模块是ngx的errorllog模块,老样子,我们还是来看一下相应的结构
在这里插入图片描述
和ngx_core_module 对比是不是很像,这里就不细说了,有兴趣的小伙伴可以自己去看一下,其实主体方法都一样,包括下面的模块,后面用到了这些模块我们会一一细说的。

接下来我们开始分析nginx的流程。详见nginx流程分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值