[nginx源码解析]配置解析(main作用域)

下面我们就以一个简单配置(nginx默认配置文件)来进行分析整个配置解析过程,同时会附图

配置文件如下(nginx默认生成配置文件)

   worker_processes  1;
   daemon  off;
   events {
       worker_connections  1024 ;
   }
   http {
       include       mime.types;
       default_type  application/octet-stream;
       sendfile        on;
      keepalive_timeout  65;
      server {
          listen       8880;
          server_name  localhost;
          location / {
              root   html;
              index  index.html index.htm;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   html;
          }
      }
  }

配置文件中的一些注释,让我给去掉,方便说明,其中这些用户设置的值,都会保存在conf->ctx上,我们主要是根据用户配置的文件(nginx.conf)来一步步跟踪conf->ctx。

break三个断点

1 执行完ngx_conf_read_token后

2 函数ngx_conf_handler

3 函数ngx_conf_handler中如下407行(因为我的代码加注释了,所以可能行数与你的不同)

 407             conf = NULL;
 408
 409             if (cmd->type & NGX_DIRECT_CONF) {//如果是直接存在即command的ctx存在create_conf的话,就会走这个流程
 410                 conf = ((void **) cf->ctx)[ngx_modules[i]->index];
 411
 412             } else if (cmd->type & NGX_MAIN_CONF) {

找到为第一个模块(索引i==0)即ngx_core_module,所以conf指向的是ngx_core_module的结构映射到的命令为

       { ngx_string("worker_processes"),
         NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
         ngx_conf_set_num_slot,
         0,
         offsetof(ngx_core_conf_t, worker_processes),
         NULL },

从上面worker_processes可以看到该命令是只能用的NGX_MAIN_CONF,而且必须带一个参数,该命令set回调函数是ngx_conf_set_num_slot(cf,cmd, ngx_core_conf_t)

设置ngx_conf_conf_t->worker_processes=1

daemon和worker_processes一样,也是存储在ngx_core_module里面,相应的命令为

 { ngx_string("daemon"),
         NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_FLAG,
         ngx_conf_set_flag_slot,
         0,
         offsetof(ngx_core_conf_t, daemon),
         NULL }

和worker_processes不同的是daemon是NGX_CONF_FLAG即使一个bool值,同时回调函数为ngx_conf_set_flag_slot,

时间: 2024-10-14 07:55:35

[nginx源码解析]配置解析(main作用域)的相关文章

[nginx源码分析]配置解析1

整个配置解析主要是函数ngx_init_cycle(&init_cycle)进行处理. ngx_init_cycle(&init_cycle) ngx_time_update()//时间更新,也是在main函数里面讲过 /* * 通过加锁和解锁,来更新如下时间 ngx_cached_time = tp; ngx_cached_http_time.data = p0; ngx_cached_err_log_time.data = p1; ngx_cached_http_log_time.da

[nginx源码分析]配置解析(http作用域)

分析完events后,开始分析http.sever.location模块. http上下文主要是创建三个用于保存每一个模块设置的变量结构,每个模块都可以保存变量到http三个数组指针中(main.server.location),每个模块的索引是模块的ctx_index变量指定在三个数组中的位置 核心代码: ctx = ngx_pcalloc(cf->pool, sizeof(ngx_http_conf_ctx_t)); //首先分配一个http上下文变量,里面是指针的指针,因为后面分配数组都是

nginx源码分析--配置信息的继承&合并

这里只讲述http{}模块下的配置: 在ngx_http_block()函数内(这个函数别调用时在ngx_inti_cycle内的ngx_conf_parse函数,这个函数遇到http命令时 回调ngx_http_block,开启http{}配置块的解读工作),针对每一个http模块,调用init_conf之后,有调用了ngx_http_merge_servers().这是为何! 首先明确几点:一个http{}配置块内可以包含多个server{}配置块,每个server{}配置块可以包含多个lo

菜鸟nginx源码剖析 配置与部署篇(一) 手把手实现nginx "I love you"

菜鸟nginx源码剖析 配置与部署篇(一) 手把手配置nginx "I love you" Author:Echo Chen(陈斌) Email:[email protected] Blog:Blog.csdn.net/chen19870707 Date:Nov 7th, 2014 还记得在前几年的CSDN泄漏账号事件中,统计发现程序员的账号中含有love的最多,这里我也俗套下,在这篇文章中将讲解如何 一步一步实用Nginx在一台机器上搭建一个最简单的显示"I love yo

NGINX源码安装配置详解(./configure),最全解析

NGINX ./configure详解 在"./configure"配置中,"--with"表示启用模块,也就是说这些模块在编译时不会自动构建"--without"表示禁用模块,也就是说这些模块在编译时会自动构建,若你想Nginx轻量级运行,可以去除一些不必要的模块. [[email protected] nginx-1.14.0]# ./configure --help => 查看安装配置项 --help 打印帮助信息. --prefix

nginx源码分析--nginx模块解析

nginx的模块非常之多,可以认为所有代码都是以模块的形式组织,这包括核心模块和功能模块,针对不同的应用场合,并非所有的功能模块都要被用到,附录A给出的是默认configure(即简单的http服务器应用)下被连接的模块,这里虽说是模块连接,但nginx不会像apache或lighttpd那样在编译时生成so动态库而在程序执行时再进行动态加载,nginx模块源文件会在生成nginx时就直接被编译到其二进制执行文件中,所以如果要选用不同的功能模块,必须对nginx做重新配置和编译.对于功能模块的选

菜鸟nginx源码剖析 框架篇(一) 从main函数看nginx启动流程(转)

俗话说的好,牵牛要牵牛鼻子 驾车顶牛,处理复杂的东西,只要抓住重点,才能理清脉络,不至于深陷其中,不能自拔.对复杂的nginx而言,main函数就是“牛之鼻”,只要能理清main函数,就一定能理解其中的奥秘,下面我们就一起来研究一下nginx的main函数. 1.nginx的main函数解读 nginx启动显然是由main函数驱动的,main函数在在core/nginx.c文件中,其源代码解析如下,涉及到的数据结构在本节仅指出其作用,将在第二节中详细解释. nginx main函数的流程图如下:

Nginx源码安装及调优配置(转)

导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前的优化 [[email protected] ~]# wget http://nginx.org/download/nginx-1.10.1.tar.gz [[email protected] ~]# tar xvf nginx-1.10.1.tar.gz -C /usr/local/src/ [[em

最全面 Nginx 入门教程 + 常用配置解析

转自 http://blog.csdn.net/shootyou/article/details/6093562 Nginx介绍和安装 一个简单的配置文件 模块介绍 常用场景配置 进阶内容 参考资料 == Nginx介绍和安装 == Nginx是一个自由.开源.高性能及轻量级的HTTP服务器及反转代理服务器, 其性能与IMAP/POP3代理服务器相当.Nginx以其高性能.稳定.功能丰富.配置简单及占用系统资源少而著称. Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx

JFinal 源码超详细解析之DB+ActiveRecord

我记得以前有人跟我说,"面试的时候要看spring的源码,要看ioc.aop的源码"那为什么要看这些开源框架的源码呢,其实很多人都是"应急式"的去读,就像读一篇文章一下,用最快的速度把文章从头到尾读一遍,那结果就是当你读完它,你也不清楚它讲了一个什么故事,想表达什么. 一个优秀的架构的源码我认为就好像一本名著一样,你的"文学"水平越高,你就越能读出作者设计的精妙之处.一篇源码在你不同水平的时候,能读出不同的东西,因此,我觉得优秀的框架的源码是经久