【Nginx】模块化设计
来源:互联网 发布:布尔矩阵的运算 编辑:程序博客网 时间:2024/05/15 11:51
高度模块化的设计是Nginx的架构基础。所有模块都是以ngx_module_t结构体表示,该结构体内部定义了7个回调方法,它们负责模块的初始化和退出。commands成员是一个包含有ngx_command_t结构体的数组,ngx_command_t的作用就是解析配置项。ctx是一个void指针,这使得模块具有高度灵活性。
ctx可以指向不同类型模块的通用接口,官方Nginx共有5大类模块,与ctx接口的对应关系如下:
- 核心模块:接口为ngx_core_module_t,类型宏为NGX_CORE_MODULE.
- HTTP模块:接口为ngx_http_modult_t,类型宏为NGX_HTTP_MODULE.
- 事件模块:接口为ngx_event_module_t,类型宏为NGX_EVENT_MODULE.
- mail模块:接口为ngx_mail_module_t,类型宏为NGX_MAIL_MODULE.
- 配置模块:接口为NULL,类型宏为NGX_CONF_MODULE.
注意,配置模块中只有一个具体的模块,名字是ngx_conf_module,它的ctx上下文指针为空,不指向任何结构体。配置模块的作用就是解析nginx.conf配置文件。
核心模块中又包含6个具体的模块:
- ngx_core_module
- ngx_errlog_module
- ngx_events_module
- ngx_openssl_module
- ngx_http_module
- ngx_mail_module
它们的通用接口如下:
typedef struct { ngx_str_t name; // 核心模块名称 // 解析配置项前,由框架调用创建存储配置项的数据结构 void *(*create_conf)(ngx_cycle_t *cycle); // 解析配置项后,由框架调用,根据解析的配置项初始化该模块 char *(*init_conf)(ngx_cycle_t *cycle, void *conf);} ngx_core_module_t;
Nginx框架管理和核心模块、配置模块有紧密的联系,而与事件模块、HTTP模块、mail模块没有产生直接关系。框架调用6个核心模块,而这6个核心模块则管理其它类型的非核心模块。5大类模块关系图如下所示:
总的来说,核心模块和配置模块是其它模块的基础;而事件模块又是HTTP模块和mail模块这两个应用层模块的基础。上图加粗部分的模块是该类模块中其它模块的基础。
参考:
《深入理解Nginx》 P256-P263.
0 0
- 【Nginx】模块化设计
- Nginx服务器架构初探---模块化设计
- nginx源码阅读(七).nginx的模块化设计
- nginx设计解读--模块化设计及程序初始化
- 模块化设计
- 模块化设计
- 模块化设计
- 模块化设计
- nginx的模块化体系结构
- nginx模块化分析
- nginx的模块化体系结构
- nginx源码模块化结构
- Nginx 的模块化体系结构
- Nginx系列(二)--模块化
- Nginx的模块化体系介绍
- 模块化设计与积木
- 前端模块化设计思路
- 软件模块化设计
- Qt5官方demo解析集17——Chapter 3: Adding Property Bindings
- TYVJ 1941 - 「Poetize4」上帝造题的七分钟2
- 【期刊发表】【文书处理】【新闻发稿】
- 嵌入式 SDL把字符串生成位图,关于位图的数据大小问题
- 文件上传
- 【Nginx】模块化设计
- scp和ssh 两台linux服务器拷贝数据
- 推荐!Android项目实战系列视频教程
- windows XP关闭文件保护
- 如何一步一步删除(linux & UNIX)环境下 oracle 11g 集群节点
- 用数组读取sqlite数据
- 解决asp.net跨站点请求伪造的简单手段以及遇到的问题
- COM编程入门不得不看的文章 :第二部分 深入COM服务器
- 教你开发事情器今天绽