当前位置: 首页 > news >正文

站建设培训学校/2022最近比较火的营销事件

站建设培训学校,2022最近比较火的营销事件,天津滨海新区疫情,wordpress 好吗知乎Nginx 是一个轻量级,但是高性能的 HTTP 和 代理 服务器,也是一个 IMAP/POP3/SMTP代理服务器。 它的第一个版本0.1.0是由俄罗斯的工程师Igor Sysoev与2004年10月4日发出。而本次研究是基于1.4.5版本 Nginx是采用模块化开发,对于支持的功能都是…

     Nginx 是一个轻量级,但是高性能的 HTTP 和 代理 服务器,也是一个 IMAP/POP3/SMTP代理服务器。 它的第一个版本0.1.0是由俄罗斯的工程师Igor Sysoev与2004年10月4日发出。而本次研究是基于1.4.5版本

 

      Nginx是采用模块化开发,对于支持的功能都是封装在各个模块下,我们也可以改造nginx,增加新的模块,在安装前使用 ./configure --add-module=path 增加在path目录下新开发的模块。可以仔细看一下configure配置文件,对于Nginx支持的模块,会生成一个ngx_modules.c文件,该文件会对支持的module做声明,并且生成一个数组ngx_module_t *ngx_modules[] 统一管理各个模块。

 

一、Ngnix的源码组织

     我们先看Nginx的源码组织,Nginx的源码放在src文件夹下。主要分成六个部分,如下

-- src|-- core|-- event|   `-- modules|-- http|   `-- modules|       `-- perl|-- mail|-- misc`-- os`-- unix

     关于这些文件夹,其中

Core文件夹下: 主要是处理nginx的入口,nginx设计的数据结构等

Event文件夹:处理网络IO情况

http文件夹:处理http请求

mail文件夹:提供邮件处理功能

Os文件夹:操作系统相关

Misc文件夹:

 

二、nginx的程序入口

Nginx的入口文件在src/core/nginx.c中,

 1 int ngx_cdecl   
 2 main(int argc, char *const *argv)
 3 {
 4     ngx_int_t         i;
 5     ngx_log_t        *log;
 6     ngx_cycle_t      *cycle, init_cycle;
 7     ngx_core_conf_t  *ccf;
 8 
 9     ………
10 
11     //对nginx支持的模块编号,统一管理
12     ngx_max_module = 0;
13     for (i = 0; ngx_modules[i]; i++) {
14         ngx_modules[i]->index = ngx_max_module++;
15     }
16 
17     //nginx核心数据结构cycle的初始化
18     cycle = ngx_init_cycle(&init_cycle);
19 
20 ……
21 
22 //选择启动模式
23     if (ngx_process == NGX_PROCESS_SINGLE) {
24         ngx_single_process_cycle(cycle);
25 
26     } else {
27         ngx_master_process_cycle(cycle);
28     }
29 
30     return 0;
31 }

入口程序在开始处理命令行传入的参数,例如nginx –V,nginx –t等;处理时间的初始化;日志的初始化等;这里不做详细描述。Main函数里面比较重要的是两个部分

第一部分是nginx的核心数据结构cycle的初始化

第二部分是选择启动模式。Nginx有两种启动模式,一种是单进程,一种是多进程,多进程采用master-work模式,master进程负责管理work进程,不处理http请求,work进程处理http请求

     Nginx的cycle数据结构是核心数据结构,会单独列出一章来研究;我们知道NGINX支持的功能非常的多,而且可定制,那么如何管理这些功能,NGINX将这些功能分隔成各个模块,在主流程上放置钩子,达到模块的订制效果。那么先看看NGINX的模块化管理

 

三、Nginx的模块化管理

我们先看一下NGINX的模块类型

struct ngx_module_s {ngx_uint_t            ctx_index; //归属主模块的编号ngx_uint_t            index;  //模块的主编号
ngx_uint_t            spare0;ngx_uint_t            spare1;ngx_uint_t            spare2;ngx_uint_t            spare3;ngx_uint_t            version;void                 *ctx;   //模块的上下文ngx_command_t        *commands;  //处理配置文件上的配置参数
    ngx_uint_t            type;ngx_int_t           (*init_master)(ngx_log_t *log);ngx_int_t           (*init_module)(ngx_cycle_t *cycle);ngx_int_t           (*init_process)(ngx_cycle_t *cycle);//fork子进程后ngx_int_t           (*init_thread)(ngx_cycle_t *cycle);void                (*exit_thread)(ngx_cycle_t *cycle);void                (*exit_process)(ngx_cycle_t *cycle);void                (*exit_master)(ngx_cycle_t *cycle);uintptr_t             spare_hook0;uintptr_t             spare_hook1;uintptr_t             spare_hook2;uintptr_t             spare_hook3;uintptr_t             spare_hook4;uintptr_t             spare_hook5;uintptr_t             spare_hook6;uintptr_t             spare_hook7;
};

     一个模块的结构主要包含三部分

1、 模块的上下文:  生成模块配置信息关心的参数,初始化配置信息关心的参数

2、 模块的commands: 将用户定制的参数写入,管理子模块

3、 模块配置信息:确定模块关心的配置信息

      Nginx有非常多的模块,同时如果有需要,可以自己定制一些模块,整体上,模块之间的关系可以按照下图所示:

     从图中,我们可以看出,模块按类型做了区分。图中第一排是核心模块,二三排可以称作功能模块,但是功能模块都有一个功能核心模块(第二排),一般情况下,模块中的init master,init module,init process,init thread,exit thread,exit process,exit master操作放在功能核心模块中,对于这些操作,其中init process如果采用的是master-work的工作模式,将会在fork子进程后,在子进程中处理

     如此,我们看一下模块的启动过程

第一阶段,配置信息的生成,分析配置文件,对配置信息如果在配置文件中没有设置,则做初始化。简单如下图所示:

    在配置信息设置后,会接着对module做初始化操作

 

第二阶段是在fork子进程后,在子进程中,将会调用所有模块的init process操作

以上基本是整个模块的管理过程

 

总结:文章主要考虑NGINX的文件结构,启动入口和模块化管理,从整体上认识NGINX

 

转载于:https://www.cnblogs.com/yimuren/p/4063164.html

http://www.lbrq.cn/news/1584937.html

相关文章:

  • 做百度色情网站排名赚钱吗/uc信息流广告投放
  • 找别人做网站需要什么信息/关键词搜索工具app
  • 建设网站详细流程图/网站备案
  • 桓台网站推广/网站seo设计
  • 辽源网站建设/列举常见的网络营销工具
  • 2022世界物联网/疫情二十条优化措施
  • 做网站别人点击能得钱吗/临沂做网站建设公司
  • 做建材上哪个网站比较好/seo综合查询是啥意思
  • 做简历哪个网站好/neotv
  • 国内最好的网站服务器/网站注册流程和费用
  • 可以做微网站的第三方平台/行业关键词查询
  • 百度快照和做网站有关系吗/廊坊关键词快速排名
  • 装饰公司网站模板/免费注册公司
  • 网站开发的基本过程/如何刷关键词指数
  • 成都网站建设电话咨询/谷歌应用商店app下载
  • wordpress island/网站搜索排名优化软件
  • wordpress纯静态网站/服装品牌策划及营销推广方案
  • 网站租空间多少钱/河北seo人员
  • 自然景观网站模板/seo课程培训要多少钱
  • 个人网站备案名/hyein seo官网
  • 自助建站免费申请个人网页/肇庆网站快速排名优化
  • 网站建设报告内容/91
  • 网上做调查网站有哪些/百度客户端电脑版
  • 网站建设怎么添加图片上去/学电脑办公软件培训班
  • 了解档案网站的建设/实时积分榜
  • 求跳转代码来自百度等搜索引擎访问跳转到另一个网站直接输入域名/西安网站建设制作
  • 怎么架构网站/哪些平台可以做推广
  • wordpress在lnmp部署/上海牛巨微seo优化
  • 网站建设找超速云建站/高端网站定制
  • 做个网站需要什么/今天的新闻头条最新消息
  • 第七章:数据持久化 —— `chrome.storage` 的记忆魔法
  • Spring Boot + Angular 实现安全登录注册系统:全栈开发指南
  • 并发编程常见问题排查与解决:从死锁到线程竞争的实战指南
  • Packets Frames 数据包和帧
  • 消息队列的优缺点
  • vxe-table表格编辑单元格,进行正则验证,不符合验证,清空单元格数据。