博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx的配置实现
阅读量:7002 次
发布时间:2019-06-27

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

nginx配置主要来源有两部分,一个来源是通过命令行 -g传入的指令,另一个来源是通过配置文件。(配置文件可以通过 -c指定,默认为 conf/nginx.conf

 

配置的实现

 配置实现是在nginx初始化cycle里面进行的ngx_init_cycle(&init_cycle)

首先调用ngx_conf_param(&conf) ,对通过 -g导入的指令进行解析,如果存在的话。

该指令通过&cf->cycle->conf_param获取,其中cf为上行的conf,对conf_file进行设置,目的在于告诉指令解析器我这个配置只是对单指令进行解析。并非来自于文件,或者block模式【后面会有介绍】。

 

conf_file.file.fd = NGX_INVALID_FILE;    conf_file.file.name.data = NULL;    conf_file.line = 0;

  

执行ngx_conf_parse(cf, NULL),这里面会进行判断,如果第二个参数存在,则解析第二个参数指定的文件,即文件作为配置体进行解析,如果第二个参数不存在,并且conf_file.file.fdNGX_INVALID_FILE则作为单条指令进行解析,否则对这个block进行解析,所谓block是指被大括号括起来的一系列指令。

我们这里是作为单指令来解析

调用ngx_conf_read_token(cf)把配置指令拆成token, 存储在cf->args,args为一个数组,每个token为一个word, 第一个wordkey,剩余的存value。例如  worker_processes  =  1 , 第一个word work_processes,第二个word 1

执行ngx_conf_handler  ,首先检测type是否是cftype或者NGX_CONF_MODULE,如果不是,一律忽略。在所有的模块中匹配指令的key,即上面的第一个word,如果匹配上了执行相应的set命令,该set为ngx_command_t中的set属性。一般执行完set就对各个模块的属性值进行了最终设置

 

调用ngx_conf_parse(&conf, &cycle->conf_file),对配置文件进行解析,这里面由于第二个参数存在,则对文件进行解析。当遇到 "{" 则对block进行解析,遇到 "}" 表示block解析完毕。

 

http指令的解析为例,当解析到“http{

”时,系统进入block解析,且执行ngx_http_block函数,该函数为http指令的set函数,在这个函数里面对http的各个模块执行

module->create_main_conf module->create_srv_conf module->create_loc_conf module->preconfiguration

 

递归调用ngx_conf_parse(cf, NULL),对里面的指令进行解析逐条解析

调用module->postconfiguration,对指令解析后进行处理

转载于:https://www.cnblogs.com/wully/archive/2012/01/05/2312751.html

你可能感兴趣的文章
CF 444B(DZY Loves FFT-时间复杂度)
查看>>
OCP-1Z0-051-名称解析-文章12称号
查看>>
UVALive 4225 Prime Bases 贪心
查看>>
Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总
查看>>
[.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程...
查看>>
【转】java中float与byte[]的互转 -- 不错
查看>>
[Ogre][地形][原创]基于OgreTerrain的地形实现
查看>>
shell登录模式及其相应配置文件(转)
查看>>
Puppet常识梳理
查看>>
web.config配置文件中的configSource属性
查看>>
发现一个国内牛逼的maven仓库,速度真的太快了
查看>>
Snmp配置
查看>>
使用java实现CNN的实战
查看>>
大白话系列之C#委托与事件讲解(二)
查看>>
linux下使用 du查看某个文件或目录占用磁盘空间的大小
查看>>
iCheck表单美化插件使用方法详解(含参数、事件等)
查看>>
IOS UIAlertController 使用方法
查看>>
MySQL存储过程 事务transaction
查看>>
93. [NOIP2001] 数的划分
查看>>
c++友元实现操作符重载
查看>>