nginx 源码分析
文章平均质量分 81
-缘故-
这个作者很懒,什么都没留下…
展开
-
Nginx 内存池
Nginx的内存池实现得很精巧,代码也很简洁。总的来说,所有的内存池基本都一个宗旨:申请大块内存,避免“细水长流”。 一、创建一个内存池nginx内存池主要有下面两个结构来维护,他们分别维护了内存池的头部和数据部。此处数据部就是供用户分配小块内存的地方。 [cpp] view plain copy print?转载 2016-09-12 08:59:51 · 261 阅读 · 0 评论 -
nginx 源码学习 ngx_worker_process_cycle子进程执行
这一节主要学习子进程处理函数ngx_worker_process_cycle[cpp] view plain copy print?src/os/unix/ngx_process_cycle.c static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data)转载 2016-11-29 17:01:25 · 530 阅读 · 0 评论 -
nginx 源码分析 进程模型
1. 基本的数据结构 1. ngx_process_t 进程数据结构,用来表示的worker进程。nginx中把所有创建的进程放到ngx_processes数组(os/unix/ngx_process.c)中,其中进程pid不为-1的元素都是存活的进程。ngx_processes数组的大小由NGX_MAX_PROCESSES宏定义,大小是1024,也就是转载 2016-11-29 16:59:56 · 374 阅读 · 0 评论 -
Nginx 关于 Rewrite 执行顺序详解
Nginx 关于 Rewrite 执行顺序详解第一篇: break 和 last 的区别Rewrite 模块概述REFER: http://wiki.nginx.org/NginxHttpRewriteModule#rewrite If the directives of this module are given at the server level, then the转载 2016-10-15 08:17:47 · 723 阅读 · 0 评论 -
Nginx ngx_Lua模块中的重定向
在Nginx中实现重定向可以通过rewrite指令,具体可参考《Nginx学习——http_rewrite_module的rewrite指令》 通过Lua模块也可以实现同样的功能,Lua模块提供了相关的API来实现重定向的功能,主要有: >ngx.exec 语法:ngx.exec(uri, args?)主要实现的是内部的重定向,等价于下面的r转载 2016-10-12 08:08:53 · 2889 阅读 · 0 评论 -
Nginx location的管理以及查找
关于nginx代码解析,我师兄雕梁的博客(http://simohayha.javaeye.com)有一系列的文章可以阅读。我这里将只介绍他博客里没有关注到的或者讲述不详细的,但是我个人又认为是nginx里面比较重要的东西。在这一篇文章里,我将介绍nginx关于location的处理,大家都知道Nginx配置文件里面会有很多的location,nginx的配置指令的作用域可以分为 main,s转载 2016-10-12 08:06:25 · 449 阅读 · 0 评论 -
Nginx 事件循环
事件循环这个概念貌似在windows编程中提得更多,Linux程序却很少提及这个概念。本文所提及的事件循环其实就是worker cycle,由于此处将关注的不再是worker进程,而是worker进程在循环过程中关于事件处理的环节,因此就盗用了事件循环这个概念。在具体看代码前,先看一下这个“循环”的概貌:经过前面相关博文的介绍,我们了解到master进程创建好一个worker进程后转载 2016-10-12 08:05:02 · 1074 阅读 · 0 评论 -
Nginx 事件机制介绍
先看几个主要方法ngx_add_channel_event 主要是把事件注册到事件池中,并且添加事件 handler,具体要结合后面的事件机制来展开。ngx_write_channel 主要是将数据写入到 pipe 中: n = sendmsg(s, &msg, 0); Top of Form Bottom of转载 2016-10-12 08:15:14 · 1332 阅读 · 0 评论 -
Nginx 配置解析
再补充一下配置解析,Nginx 配置解析最大的亮点是用一个三级指针和 ctx 关联了起来,然后每个模块关注各自的配置专注解析和初始化就行了。 配置文件解析ngx 在 main 函数执行的时候会调用 ngx_init_cycle,在这个过程中,会进行初始化的几个步骤: create_conf 针对 core_module 类型的模块,将会调用 crea转载 2016-10-12 08:13:47 · 452 阅读 · 0 评论 -
Nginx源码分析:3张图看懂启动及进程工作原理
图一:nginx 启动及内存申请过程分析任何程序都离不开启动和配置解析。ngx 的代码离不开 ngx_cycle_s 和 ngx_pool_s 这两个核心数据结构,所以我们在启动之前先来分析下。 内存申请过程分为 3 步 假如申请的内存小于当前块剩余的空间,则直接在当前块中分配。假如当前块空间不足,则调用 ngx_palloc_block 分配一转载 2016-10-12 08:11:31 · 6805 阅读 · 0 评论 -
Nginx hash结构
nginx在存储server_name和ngx_http_core_srv_conf_t的映射的时候用到了hash结构,nginx中的非通配符server_name存储hash结构类似如下形式 配置server_names_hash_max_size控制bucket的最大数量,server_names_hash_bucket_size控制每个bucket的大小,每个bucket转载 2016-09-12 08:54:42 · 358 阅读 · 0 评论 -
Nginx 配置初始化过程
nginx解析配置文件,将解析出来得配置存放在ngx_cycle_s的conf_ctx中,conf_ctx是个四级指针,因为保存这些配置需要context,而这些context是有层级关系,最终的配置结构如图: http模块的配置有些复杂,由于server的配置还可以出现在http模块中,同时location的配置可以出现在http模块或者server模块中,所以转载 2016-09-12 08:53:27 · 532 阅读 · 0 评论 -
Nginx 中的4级指针
nginx的所有配置结构体全部放在一个cycle的四级指针中,本文就具体分析一下每级指针究竟指向的是什么,下图表示了这个四级指针每一级的指向,图中虚拟地址模拟了真实地址,ctx指针存的指向虚拟地址为1的数据,图中只列举出core,event,http模块最基础的配置结构。 需要注意得是,从图中不难发现,对于常用的模块,core模块,event模块,http模块,core转载 2016-09-12 08:45:07 · 416 阅读 · 0 评论 -
Nginx location的配置-----三叉排序树
nginx在处理location的配置的时候,用到了一种三叉排序树,加速了通过request的url和location的映射速度。 可以从图中看到,static location tree的结构中,left指向的node是比parent的节点小的,right指向的node是比parent节点大的,tree指向拥有parent前缀的节点。初始的static location转载 2016-09-12 08:51:09 · 1979 阅读 · 0 评论 -
nginx的HTTP模块编写
开发HTTP模块流程这里的HTTP模块是最简单最经常编写的模块,开发一个完整的简单的HTTP模块需要下面几个步骤(以模块名为ngx_http_mytest_module为例):1 编写config文件(这是为了让nginx在configure过程能找到编写的模块)下面是编写具体的模块代码结构2 编写模块结构 ngx_http_mytest_module这个是转载 2016-11-29 17:12:34 · 278 阅读 · 0 评论