nginx源码分析:module机制

摘要:
根据nginx官方文档,描述了添加模块。当我们需要添加模块时,我们需要执行以下操作:1.为模块创建一个新目录。执行configure后,将在nginx源代码目录_modules下的objs目录中生成ngx。C文件,其中包含编译nginx时需要编译的模块。然后在ngx_ preinit_在模块函数中,设置ngx _模块中每个模块的索引和名称。最后,在ngx_init_modules函数中,调用每个模块的init函数进行初始化。到目前为止,已经介绍了nginx模块的机制。您可以看到,这种设计非常方便地扩展nginx。

 根据nginx官方文档,添加一个module的介绍,当我们需要添加一个module时,需要以下操作:

1、为该module新建一个目录。

2、添加一个config文件,一个module核心代码源文件。

3、为configure添加参数--add-module=/path/to/module,然后重新编译。

这个操作步骤我们都很熟悉,那么为什么这样操作后就可以把这个module添加到nginx中呢?

执行configure后,会在nginx源码目录下objs目录下生成一个ngx_modules.c文件,该文件中包含了nginx编译时需要编译进去的modules。

当我们添加了--add-module=/path/to/module之后,会把该module添加到ngx_modules.c文件中。

nginx源码分析:module机制第1张

该文件是源文件,包含了ngx_modules的定义,在src/core/ngx_module.h中包含ngx_modules的声明,这样在其他地方就可以引用ngx_modules,下面会看到引用它的地方。

然后在ngx_preinit_modules函数中,设置了ngx_modules中的各个module的索引和名字。

nginx源码分析:module机制第2张

然后,在ngx_cycle_modules函数中将ngx_moduels拷贝到cycle->modules中。

nginx源码分析:module机制第3张

最后,在ngx_init_modules函数中调用每个module的init函数进行初始化。

nginx源码分析:module机制第4张

到此为止,nginx module的机制就介绍完了,可以看到这种设计非常方便对nginx进行扩展。

免责声明:文章转载自《nginx源码分析:module机制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux的启动配置文件(grub)WebBench简介下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx 405 not allowed问题的解决

转载自: http://www.linuxidc.com/Linux/2012-07/66761.htm Apache、IIS、Nginx等绝大多数web服务器,都不允许静态文件响应POST请求,否则会返回“HTTP/1.1 405 Method not allowed”错误。 例1:用Linux下的curl命令发送POST请求给Apache服务器上的HT...

nginx路径设置(web)

原文 https://www.jianshu.com/p/57db2c5d0cb9 语法 root 语法:root path 默认值:root html 配置段:http、server、location、if alias 语法:alias path 配置段:location root&alias区别 root 如果一个请求的 URI 是/web...

如果有人问你 Dubbo 中注册中心工作原理,就把这篇文章给他

注册中心作用 开篇首先想思考一个问题,没有注册中心 Dubbo 还能玩下去吗? 当然可以,只要知道服务提供者地址相关信息,消费者配置之后就可以调用。如果只有几个服务,这么玩当然没问题。但是生产服务动辄成千上百,如果每个服务都需要手写配置信息,想象一下是多么麻烦。 好吧,如果上面的问题都不是事的话,试想一下如果一个服务提供者在运行过程中宕机,消费者怎么办?...

python服务器环境搭建——安装相关软件

在上一篇我们在本地的虚拟服务器上安装好CentOS7后,我们的python web服务、自定义的python service或python脚本需要在服务器上运行,还需要在服务器安装各种相关的软件才行,一般来说,想要实现自动化部署需求,还需要安装nginx、svn、uwsgi、python3.0(系统自带python2.7.5)、supervisor、pos...

Android 7.0 Gallery图库源码分析1

分析一个项目的源代码时,第一件事就是查看清单文件,找到程序入口,我们从Gallery2源码的清单文件中可以看到GalleryActivity是此应用的启动Activity。 1 <activity android:name="com.android.gallery3d.app.GalleryActivity" android:label="@stri...

Mybatis的基本操作案列增加以及源码的分析(二)

一、构建一个框架的项目的思路 首先我们先建立一个web项目,我们需要jar,mybatis-config.xml和studentDao.xml的配置随后就是dao、daoimpl、entity、的架构。 二、具体步骤(添加一个学生) 1、创建一个web项目 2、导入jar 3、创建实体entity /*** 学生实体类 * @authorHappy...