博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Nginx】模块化设计
阅读量:5937 次
发布时间:2019-06-19

本文共 1210 字,大约阅读时间需要 4 分钟。

高度模块化的设计是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.

转载于:https://www.cnblogs.com/yutingliuyl/p/7115531.html

你可能感兴趣的文章
nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)
查看>>
leetcode Valid Palindrome C++&python 题解
查看>>
45个很实用的 Oracle 查询语句小结
查看>>
送给队友的汉堡包
查看>>
sybase用户管理(创建、授权、删除)
查看>>
修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory问题
查看>>
前端面试题汇总
查看>>
脚本语言
查看>>
poj 1011 :Sticks (dfs+剪枝)
查看>>
【广告】广告笔记
查看>>
CHIL-SQL-VIEW(视图)
查看>>
node之path
查看>>
我的25年嵌入式生涯-周立功(转)
查看>>
Unity3D使用经验总结 优点篇
查看>>
jQuery属性
查看>>
数组去重复元素-(不改变其元素的先后顺序)-中兴笔试程序设计
查看>>
项目开发--------地图与定位功能
查看>>
Hadoop_12_Hadoop 中的RPC框架演示
查看>>
Integrate Neutron and OVN
查看>>
国家要把网络升级到IPv6,会对我们普通人有什么影响?
查看>>