nginx
文章平均质量分 67
kenbinzhang
http://zhangbin2006.qzone.qq.com
展开
-
nginx源码分析(4)-方法(1)
看了几天的源码,进度很慢,过于关注代码实现的细节了,反而很难看清整体结构。于是问诸google寻找方法。大体上分析源代码都要经历三遍过程,第一遍是浏览,通过阅读源码的文档和注释,阅读接口,先弄清楚每个模块是干什么的而不关心它是怎么做的,画出架构草图;第二遍是精读,根据架构草图把系统分为小部分,每个部分从源码实现自底向上的阅读,更深入细致的理解每个模块的实现方式以及与模块外部的接口方式等,弄明白模块原创 2009-10-11 11:01:00 · 7155 阅读 · 1 评论 -
nginx源码分析(17)-模块分析(3)
前面已经分析了nginx的事件处理机制的构建阶段,也分析过nginx的进程模型,利用上一篇文章中总结的并发模型设计的知识,先总结介绍一下nginx的并发模型,然后剖析nginx事件处理机制运行阶段的处理过程。nginx的进程模型采用的是prefork方式,预先分配的worker子进程数量由配置文件指定,默认为1。master主进程创建监听套接口并监听客户连接,每个worker原创 2009-11-02 17:48:00 · 18675 阅读 · 4 评论 -
nginx源码分析(18)-基础设施(1)
从代码的结构看,nginx可以分为三个部分:基础设施、并发模型和应用模块。前面已经介绍了nginx的模块化设计,剖析了nginx的并发模型,并发模型主要是核心类模块和event类模块实现的。应用模块主要是指http类模块和mail类模块,它们实现了nginx作为web服务器、反向代理服务器和邮件代理服务器的功能,应用模块多和相应的领域知识有关,放在最后剖析。基础设施主要包括memory、log、原创 2009-10-30 17:58:00 · 6904 阅读 · 0 评论 -
nginx源码分析(16)-模块分析(2)
对一个高性能服务器来说,一般都要求处理速度快和资源占用小,尤其是当服务器遇到C10K问题的时候。要做到处理速度足够快,其并发模型的设计相当关键;而要做到资源尤其是内存资源的占用少,就要依赖于其资源分配和资源管理的方案设计。网上有一些比较apache、lighttpd和nginx的文章,一般认为apache的功能完善,但是并发能力较弱,资源占用较多,一般并发量达到一千以上,服务已经原创 2009-10-29 12:07:00 · 5222 阅读 · 0 评论 -
nginx源码分析(15)-模块分析(1)
nginx的内部实现上用四个模块上下文结构把所有模块从实现上分开为四种,不同的模块上下文支持不同的模块钩子。如果抛开实现方式,仅仅从功能逻辑上来区分,大致可以把所有模块分为三类,第一类是nginx的内核模块;第二类是http模块;第三类是mail模块。内核模块包含核心类模块、event类模块和没有模块上下文结构的conf模块;http模块是所有的http类模块;mail模块是所有的mail原创 2009-10-28 11:43:00 · 5633 阅读 · 1 评论 -
nginx源码分析(14)-运维与配置(2)
事件模块的指令集主要是配置epoll、kqueue、select、poll等,这些指令控制nginx处理连接的方式,这些指令有: 1、accept_mutex语法形式:accept_mutex [on|off]默认值:on nginx使用accept mutex保护accept()系统调用。accept mutex在不同的系统上会使用原子指令实现或者使用文件上锁实现。 2、原创 2009-10-24 14:08:00 · 5038 阅读 · 0 评论 -
nginx源码分析(13)-运维与配置(1)
nginx现在已经支持很多功能,系统内已经实现的模块多达72个,这些模块提供了若干配置指令来设置和控制nginx的相关处理过程。 为了能够更深入的进行接下来的源码分析,利用一些篇幅讨论一下nginx的运维和配置相关的内容,主要参考了nginx的英文wiki资料,按照自己的思路整理成nginx的操作和配置指南,可以作为使用nginx的一个起点。 首先简单介绍一下nginx的编译、启动原创 2009-10-24 11:08:00 · 5477 阅读 · 0 评论 -
nginx源码分析(12)-进程启动分析(2)
紧接上回。第四个剖析的是worker子进程的执行函数ngx_worker_process_cycle(src/os/unix/ngx_process_cycle.c)。static voidngx_worker_process_cycle(ngx_cycle_t *cycle, void *data){ ngx_uint_t i; ngx原创 2009-10-19 09:49:00 · 6652 阅读 · 0 评论 -
nginx源码分析(11)-进程启动分析(1)
nginx的进程启动过程是在ngx_master_process_cycle(src/os/unix/ngx_process_cycle.c)中完成的(单进程是通过ngx_single_process_cycle完成,这里只分析多进程的情况),在ngx_master_process_cycle中,会根据配置文件的worker_processes值创建多个子进程,即一个master进程和多个work原创 2009-10-19 09:47:00 · 7991 阅读 · 1 评论 -
nginx源码分析(10)-启动过程分析
nginx有两个重要头文件:ngx_config.h和ngx_core.h。src/core/ngx_config.h文件中包含的是和操作系统相关的宏定义和头文件,其中又会包含objs/ngx_auto_headers.h和src/os/unix/ngx__config.h,前面提到过,这个头文件是自动脚本检验操作系统后生成的,这个头文件中包含了一些宏定义,这些宏定义说明了存在哪些与特定操原创 2009-10-16 16:04:00 · 9994 阅读 · 0 评论 -
nginx源码分析(9)-模块化(4)
模块的上下文是四个结构体定义的:ngx_core_module_t、ngx_event_module_t、ngx_http_module_t、ngx_mail_module_t,分别对应于四类模块。typedef struct { ngx_str_t name; void *(*create_conf)(ngx_cyc原创 2009-10-13 12:23:00 · 8681 阅读 · 0 评论 -
nginx源码分析(2)- 概览
源码分析是一个逐步取精的过程,最开始是一个大概了解的过程,各种认识不会太深刻,但是把这些真实的感受也记录下来,觉得挺有意思的,可能有些认识是片面或者是不正确的,但可以通过后面更深入细致的分析过程,不断的纠正错误和深化理解。源码分析是一个过程,经验是逐步累积起来的,希望文字可以把这种累积的感觉也准确记录下来。现在就看看对nginx源码的第一印象吧。源码包解压之后,根目录下有几个子目录和几个文件,最重原创 2009-10-11 10:59:00 · 16092 阅读 · 3 评论 -
nginx源码分析(6)-模块化(1)
源码的src/core目录下实现了不少精巧的数据结构,最重要的有:内存池ngx_pool_t、缓冲区ngx_buf_t、缓冲区链ngx_chain_t、字符串ngx_str_t、数组ngx_array_t、链表ngx_list_t、队列ngx_queue_t、基于hash的关联数组ngx_hash_t、红黑树ngx_rbtree_t、radix树ngx_radix_tree_t等,这些数据原创 2009-10-12 09:27:00 · 11167 阅读 · 3 评论 -
nginx源码分析(3)- 自动脚本
nginx的自动脚本指的是configure脚本程序和auto子目录下面的脚本程序。自动脚本完成两件事情,其一是检查环境,其二是生成文件。生成的文件有两类,一类是编译代码需要的Makefile文件,一类是根据环境检查结果生成的c代码。生成的Makefile很干净,也很容易阅读。生成的c代码有三个文件,ngx_auto_config.h是根据环境检查的结果声明的一些宏定义,这个头文件被include原创 2009-10-11 11:00:00 · 8854 阅读 · 1 评论 -
nginx源码分析(1)- 缘起
nginx是一个开源的高性能web服务器系统,事件驱动的请求处理方式和极其苛刻的资源使用方式,使得nginx成为名副其实的高性能服务器。nginx的源码质量也相当高,作者“家酿”了许多代码,自造了不少轮子,诸如内存池、缓冲区、字符串、链表、红黑树等经典数据结构,事件驱动模型,http解析,各种子处理模块,甚至是自动编译脚本都是作者根据自己的理解写出来的,也正因为这样,才使得nginx比其他的web原创 2009-10-11 10:58:00 · 15682 阅读 · 7 评论 -
nginx源码分析(5)-方法(2)
利用nginx wiki和互联网收集了不少nginx相关的文档资料,但是仔细阅读之后发觉对理解nginx架构有直接帮助的资料不多,一些有帮助的资料也要结合阅读部分源码细节才能搞清楚所述其是,可能nginx在非俄国之外的环境下流行不久,应用还很简单,相关的英文和中文文档也就不够丰富的原因吧。不过还是有一些金子的。如果要了解nginx的概况和使用方法,wiki足以满足需要,wiki上有各个模块的概要和原创 2009-10-11 11:01:00 · 10774 阅读 · 0 评论 -
nginx源码分析(8)-模块化(3)
接下来剖析模块的指令。模块的指令在源码中是ngx_command_t结构的变量,ngx_command_t的声明在src/core/ngx_conf_file.h中:struct ngx_command_s { ngx_str_t name; ngx_uint_t type; char原创 2009-10-12 13:31:00 · 8557 阅读 · 1 评论 -
nginx源码分析(7)-模块化(2)
分析nginx的模块化架构的实现方式,就要从ngx_module_t结构体入手。ngx_module_t的声明在src/core/ngx_conf_file.h中:#define NGX_MODULE_V1 0, 0, 0, 0, 0, 0, 1#define NGX_MODULE_V1_PADDING 0, 0, 0, 0, 0, 0, 0, 0struc原创 2009-10-12 09:29:00 · 12630 阅读 · 0 评论 -
nginx源码分析(19)-方法(3)
nginx的三个部分:核心、事件模型/并发模型、应用模块,之前已经详细了分析了核心和事件模型/并发模型两个部分,也详细解释了nginx的模块化设计。之前的分析采用了平铺直叙的方式,对源码中主要函数进行了流程化的分解和剖析,经过这种分析方式,对nginx的认识越来越全面和深入,相关的领域知识和背景知识也越来越丰富。但是这种分析方法比较直白,分析不够深入和透彻,缺少总结和对比,只原创 2009-11-12 13:54:00 · 9237 阅读 · 3 评论