zoukankan      html  css  js  c++  java
  • 【Nginx】模块化设计

    高度模块化的设计是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.
  • 相关阅读:
    简单工厂模式
    设计模式概述
    Excel中如何按单元格颜色求和,这五种牛批的方法,值得学习
    Excel数据透视表只能求和运算?快来学习求差运算小技巧
    如何在Excel中分组排名?两个公式轻松搞定!
    开始菜单之数字格式,这些基础知识还记得吗?
    2021,我来了
    2020年会必备,Excel轻松制作抽奖小游戏
    如何用Excel制作工作计划,跟踪任务进度,快来学习吧
    如何防止Excel数据录入出错,巧用数据验证,实现自动限制录入
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7115531.html
Copyright © 2011-2022 走看看