热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nginx启动过程分析

nginx的启动过程紧紧围绕着ngx_cycle_t的结构体展开,首先通过ngx_get_options()获取命令行参数,然后通过ngx_time_init()进行时间的初始化,

      nginx的启动过程紧紧围绕着ngx_cycle_t的结构体展开,首先通过ngx_get_options()获取命令行参数,然后通过ngx_time_init()进行时间的初始化,如全局变量ngx_cached_time再通过ngx_regx_init()完成正则的初始化,通过ngx_log_init()创建日志对象,初始化日志,如初始化全局变量ngx_prefix,打开日志文件ngx_log_file.fd通过ngx_create_pool()创建内存池,大小为1024Bngx_save_argv()保存命令行参数至全局变量ngx_os_argvngx_argcngx_argv;通过ngx_process_options()处理init_cycle中的配置文件路径,初始化ngx_cycleprefix, conf_prefix, conf_file, conf_param等字段;ngx_os_init()完成操作系统的一些信息的获取,如内存页面大小、系统限制资源等信息,将其保存在对应的全局变量中,通过ngx_crc32_table_init()初始化一个循环冗余校验表,为后面高效查找循环冗余做准备;通过ngx_add_inherited_sockets:通过环境变量

  • 解析环境变量NGINX_VAR="NGINX"中的sockets,并保存至ngx_cycle.listening数组;
  • 设置ngx_inherited=1
  • 调用ngx_set_inherited_sockets()逐一对ngx_cycle.listening数组中的sockets进行设置;

然后对模块数组中的各模块进行编号,继而调用ngx_init_cycle()完成对ngx_cycle_t类型变量cycle的初始化,在ngx_init_t中做的事情如:

,

     之后,根据条件调用 ngx_signal_process()对进程信号处理,通过ngx_os_status()获取操作系统的状态信息,读取配置文件的信息,

  • 若有信号,则进入ngx_signal_process()处理;
  • 调用ngx_init_signals()初始化信号;主要完成信号处理程序的注册;
  • 若无继承sockets,且设置了守护进程标识,则调用ngx_daemon()创建守护进程;
  • 调用ngx_create_pidfile()创建进程记录文件;(NGX_PROCESS_MASTER=1进程,不创建该文件)
  • 进入进程主循环;
    • 若为NGX_PROCESS_SINGLE=1模式,则调用ngx_single_process_cycle()进入进程循环;
    • 否则为master-worker模式,调用ngx_master_process_cycle()进入进程循环;
    • 具体可参考源码分析—master/worker进程启动>

参考:http://blog.csdn.net/livelylittlefish/article/details/7243718


nginx启动过程分析


推荐阅读
  • VS Code 中 .vscode 文件夹配置详解
    本文介绍了 VS Code 中 .vscode 文件夹下的配置文件及其作用,包括常用的预定义变量和三个关键配置文件:launch.json、tasks.json 和 c_cpp_properties.json。 ... [详细]
  • 解析 HTTP 头 'Vary: Accept-Encoding' 的作用与重要性
    本文详细探讨了 'Vary: Accept-Encoding' HTTP 头的作用,即指导缓存系统(如代理服务器和 CDN)根据不同的编码需求存储和提供适当的资源版本,确保不同类型的客户端能够接收到适合自己的内容。 ... [详细]
  • 本文探讨了Lua中元表和元方法的使用,通过具体的代码示例展示了如何利用这些特性来实现类似C语言中的运算符重载功能。 ... [详细]
  • 拖拉切割直线 ... [详细]
  • 四月个人任务:Linux基础操作与网络管理
    本文介绍了两项主要任务:编写一个脚本来检测192.168.1.0/24子网中当前在线的IP地址,以及如何在Linux系统中挂载Windows网络共享目录。通过具体步骤和代码示例,帮助读者理解和掌握相关技能。 ... [详细]
  • Python中调用Java代码的方法与实践
    本文探讨了如何在Python环境中集成并调用Java代码,通过具体的步骤和示例展示了这一过程的技术细节。适合对跨语言编程感兴趣的开发者阅读。 ... [详细]
  • 本文介绍了在Android Studio中通过代码和配置文件两种方法来移除Activity的标题栏,并讨论了当Activity继承自AppCompatActivity时的特殊处理方法。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置单节点的Redis服务,包括下载、解压、编译安装以及启动服务的具体步骤。 ... [详细]
  • Pandas中使用sort_values方法进行数据排序
    本文介绍了如何利用Python的Pandas库中的sort_values方法对DataFrame对象进行排序。首先通过Numpy库生成随机数据,然后详细解释了DataFrame的创建过程及其参数,并重点探讨了sort_values方法的使用技巧。 ... [详细]
  • 13、单向链表
    头文件:LinkList.hLinkList.cmain.cVS2 ... [详细]
  • 抽象工厂模式 c++
    抽象工厂模式包含如下角色:AbstractFactory:抽象工厂ConcreteFactory:具体工厂AbstractProduct:抽象产品Product:具体产品https ... [详细]
  • PHP 5.4.8 编译安装指南
    本文详细介绍了如何在Linux环境下编译安装PHP 5.4.8,并配置为FastCGI模式运行。包括所需依赖包的安装、源代码下载、编译配置及启动服务等步骤。 ... [详细]
  • 本文将详细介绍如何实现类似于CSDN博客的页面返回顶部功能,通过调整返回速度和图标显示条件,使用户体验更加流畅。适合前端开发者参考学习。 ... [详细]
  • 本文面向非计算机专业背景的编程爱好者,介绍如何仅使用基础的C语言知识——二维数组和结构体,无需掌握复杂的数据结构如链表,即可编写一款经典的贪食蛇游戏。通过本教程,您将了解游戏开发的基本原理和实现方法。 ... [详细]
  • 本文详细介绍了如何通过配置 Chrome 和 VS Code 来实现对 Vue 项目的高效调试。步骤包括启用 Chrome 的远程调试功能、安装 VS Code 插件以及正确配置 launch.json 文件。 ... [详细]
author-avatar
嘛道理
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有