这里仅仅讲述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{}配置块能够包括多个location{}配置块,每一个location{}配置块能够嵌套location{}配置块。把每一个使用{}包括起来的配置块称为一个层次。在ngx_http_block中调用ngx_conf_parse时,还调用了ngx_http_core_server和ngx_http_core_location 这两个函数是解析server{}块和location{]块的。

在不同的层次为同一个http模块创建了存储配置的结构体空间。比方在http{}层次为某一个http模块创建了
main_conf、srv_conf、loc_conf配置,在ngx_http_core_server内为同一个http模块创建了srv_conf loc_conf配置,在ngx_http_core_location函数内为同一个http模块创建了loc_conf配置。可是这是不同层次上的配置。对于某一个http模块中的某一个命令来说,它可能出现的区域有http{} server{} locaton{},假设在某一个server{}块内没有这个命令 那么它就须要从http{}中继承这个命令,假设某个server{}中存在这个命令,那么就不须要从http{}中继承;假设server{}中的某一个location{}中没有这个命令,那么就须要从上层(server{}层或者location{}层)继承,假设上层没有,直接从http{}中继承,或者使用默认。整个继承的流程如上所述。对于某一个http模块中的命令能够出现的层次是它本身自己知道的,怎么合并(使用函数merge_srv_conf和

merge_loc_conf函数回调)也是模块本身定义的。

正是模块中命令能够出如今不同区域才造成了继承合并的操作,这也是为了配置文件的灵活。

解析流程:在ngx_http_block函数中。

一个for循环为每个http模块调用init_main回调和ngx_http_merge_servers.

在ngx_http_merge_servers中一个for循环 须要遍历全部的server{}配置块。首先回调调用merge_srv_conf,从http上下文继承srv_conf配置。然后回调调用merge_loc_conf,从http上下文继承loc_conf配置,然后处理这个server{}块下的全部location{}块 调用ngx_http_merge_location

在ngx_http_merge_location中,首先从上文(server{]或者location{})继承loc_conf配置 然后处理location{]模块下的全部loction{}

nginx源代码分析--配置信息的继承&合并的更多相关文章

  1. Nginx源代码分析—业务流程

    Nginx源代码分析-业务流程 到此为止,我们如果ngx_init_cycle已经结束.我们临时无论他做了什么,我们从他做的效果进入. 从常理上来讲,假设一个请求到达,那么我们须要接受这个请求,那么就 ...

  2. 新秀nginx源代码分析数据结构篇(四)红黑树ngx_rbtree_t

    新秀nginx源代码分析数据结构篇(四)红黑树ngx_rbtree_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csd ...

  3. 新秀nginx源代码分析数据结构篇(两) 双链表ngx_queue_t

    nginx源代码分析数据结构篇(两) 双链表ngx_queue_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn. ...

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

    菜鸟nginx源代码剖析 配置与部署篇(一) 手把手配置nginx "I love you" Author:Echo Chen(陈斌) Email:chenb19870707@gm ...

  5. nginx源代码分析--进程间通信机制 & 同步机制

    Nginx源代码分析-进程间通信机制 从nginx的进程模型能够知道.master进程和worker进程须要通信,nginx中通信的方式有套接字.共享内存.信号.对于master进程,从外部接受信号, ...

  6. nginx源代码分析--配置文件解析

    ngx-conf-parsing 对 Nginx 配置文件的一些认识: 配置指令具有作用域,分为全局作用域和使用 {} 创建其他作用域. 同一作用域的不同的配置指令没有先后顺序:同一作用域能否使用同样 ...

  7. nginx源代码分析之内存池实现原理

    建议看本文档时结合nginx源代码. 1.1   什么是内存池?为什么要引入内存池? 内存池实质上是接替OS进行内存管理.应用程序申请内存时不再与OS打交道.而是从内存池中申请内存或者释放内存到内存池 ...

  8. nginx源代码分析--event事件驱动初始化

    1.在nginx.c中设置每一个核心模块的index ngx_max_module = 0; for (i = 0; ngx_modules[i]; i++) { ngx_modules[i]-> ...

  9. nginx源代码分析--GDB调试

    利用gdb[i]调试nginx[ii]和利用gdb调试其他程序没有两样,只是nginx能够是daemon程序,也能够以多进程执行,因此利用gdb调试和寻常会有些许不一样. 当然,我们能够选择将ngin ...

随机推荐

  1. [luoguP1963] [NOI2009]变换序列(二分图最大匹配)

    传送门 根据公式xjb推一下,然后就可以连边. 考虑到字典序最小,和匈牙利算法的实现过程,要倒序匹配. #include <cmath> #include <cstdio> # ...

  2. 主机ping不通虚拟机,但是虚拟机能ping通主机

    一.虚拟机网络连接方式选择Nat 二. 关闭Linux防火墙命令:service iptables stop / service firewalld stop 查看Linux防火墙状态命令:servi ...

  3. JavaWeb学习总结(十七)——JSP中的九个内置对象(转)

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  4. YUV和RGB格式分析【转】

    转自:http://www.cnblogs.com/silence-hust/p/4465354.html 做嵌入式项目的时候,涉及到YUV视频格式到RGB图像的转换,虽然之前有接触到RGB到都是基于 ...

  5. python读取Excel实例

    1.操作步骤: (1)安装python官方Excel库-->xlrd (2)获取Excel文件位置并读取 (3)读取sheet (4)读取指定rows和cols内容 2.示例代码 # -*- c ...

  6. AC日记——教辅的组成 洛谷 P1231

    题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书 ...

  7. 微信小程序踩坑之一[thist]使用技巧

    刚上手小程序 时,习惯把this当成jquery中的$(this)来用,实际上这两个还是有差别的 在页面方法中调用其他方法,一般是用this.function(),直接调用小程序 的方法或函数则是用w ...

  8. SRM1153

    SRM 711 DIV1 <br > 250 ConsecutiveOnes 位数不会很多,直接暴枚 直接在\(n\)的基础上修改,暴枚修改的区间,显然,位置先于暴力修改区间的位置不需要改 ...

  9. error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools":解决方案

    我是在安装scrapy时遇到这个问题的,安装其他组件也可能会遇到.但问题解决办法都是大致相同的. 以安装scrapy为例: 在pycharm中安装twisted时出现: error: Microsof ...

  10. Java中String/StringBuffer/StringBuilder区别(转)

    1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String 2.String <(StringBuffer,StringBuild ...