
nginx源码分析
文章平均质量分 72
撰写专栏主要目的是试图通过对于nginx源码的分析,从使用,模块开发,架构分析等多个维度促进自身对于nginx的理解,并将所得总结出来与大家分享交流,同时也期望能获得宝贵的意见和建议
qiuhui00
这个作者很懒,什么都没留下…
展开
-
nginx事件模块之ngx_epoll_module源码分析
ngx_epoll_module是nginx众多事件模块的其中一个,它利用linux的epoll模型实现nginx事件框架所定义的事件模块接口。运行在linux系统上的nginx默认使用该模块作为事件框架的底层实现。ngx_epoll_module主要是实现了ngx_event.h中规定的事件模块的接口,即实现了ngx_event_module_t中定义的那组回调函数,如下代码片段所示:stati...原创 2018-02-09 15:10:15 · 809 阅读 · 0 评论 -
nginx事件处理框架及源码解析
nginx的中的事件可以分为两类:系统事件和定时器事件。系统事件指的是由操作系统通知给nginx的事件,例如各种IO多路复用api(select,epoll_wait等)返回的事件,定时器事件是指由nginx的定时器模型产生的超时事件。由于事件处理机制与生俱来的复杂性,为了方便管理,降低开发难度,nginx的事件处理框架将事件的管理抽象成一系列的接口,这些接口屏蔽了事件处理的底层细节,外部只需要关...原创 2018-02-09 14:48:58 · 677 阅读 · 0 评论 -
nginx的内存池设计
为了方便管理内存和文件等计算机资源,提高运行效率,nginx实现了自己的内存池。除了启动过程中在尚未创建内存池之前的阶段是直接使用系统的内存管理接口之外,nginx的内存管理都是通过内存池进行的。nginx的内存池源码位于ngx_palloc.c和ngx_palloc.h中。首先看内存池相关的数据结构的定义:struct ngx_pool_s { ngx_pool_data_t d原创 2018-02-07 11:10:47 · 494 阅读 · 0 评论 -
http框架核心之ngx_http_core_module.c
ngx_http_core_module.c是http框架代码中最重要的一部分。nginx中http协议的实现,http框架的大部分核心指令,http请求整个生命周期的处理流程(也可以说是http请求的处理框架)都在这里实现。...原创 2018-02-05 15:59:08 · 628 阅读 · 0 评论 -
nginx启动流程分析
/* 以下只分析linux环境下的启动流程,非linux环境略过 */int ngx_cdeclmain(int argc, char *const *argv){ ngx_buf_t *b; ngx_log_t *log; ngx_uint_t i; ngx_cycle_t *cycle, i原创 2018-02-01 17:08:53 · 355 阅读 · 0 评论 -
nginx的http模块配置接口以及http框架配置内存布局
http模块是nginx中数量最多,也是配置最复杂的模块。http模块的配置最多可以分为三级,分别是http级别,server级别和location级别。nginx为http模块定义了一组接口,用于模块创建,设置,合并各级别的配置项。在配置读取阶段一共有9个接口,在不同阶段,不同位置被调用。其中8个在ngx_http_module_t中定义,这8个回调是模块级别的,还有1个是指令级别的,由模块的指原创 2018-02-05 10:01:40 · 689 阅读 · 0 评论 -
nginx错误日志模块ngx_errlog_module
ngx_errlog_module模块是nginx中第二个被执行的模块,它是nginx用来为其它模块提供日志记录功能的基础模块,http,mail,stream等模块都会调用该模块的接口实现日志记录功能。该模块提供了一个指令:error_log,用于指定全局范围的日志配置,指令的定义如下:static ngx_command_t ngx_errlog_commands[] = {原创 2018-02-02 18:09:00 · 1978 阅读 · 0 评论 -
nginx核心模块ngx_core_module分析
ngx_core_module是nginx中最为核心的一个模块,也是第一个被加载的模块。为什么它是第一个被加载的呢?我们先看它的配置结构体定义:typedef struct { ngx_flag_t daemon;//是否守护进程模式 ngx_flag_t master;//是否以单master进程方式运行原创 2018-02-02 17:47:57 · 812 阅读 · 0 评论 -
nginx定时器分析
nginx的定时器用于向其它模块提供非操作系统事件的管理接口,源码位于ngx_event_timer.h和ngx_event_timer.c中。nginx的定时器管理是通过红黑树实现的。红黑树的每一个内节点都代表一个定时器事件,节点的值是定时器的超时时间戳,以毫秒为单位,树的最左边的节点的值最小,这意味着树的最左边的节点就是距离超时时间最近的事件,最右边的节点就是距离超时时间最远的事件。添加,原创 2018-02-02 17:18:05 · 445 阅读 · 0 评论 -
nginx字符串格式化函数
nginx自定义/重命名了很多数据类型,为了在打印日志时能够方便的打印这些数据类型,nginx实现了自己的字符串格式化函数,其中核心是ngx_vlsprintf,它支持多种自定义数据类型的格式化,如下所示: * supported formats: * %[0][width][x][X]O off_t * %[0][width]T t原创 2018-02-02 17:13:04 · 3495 阅读 · 0 评论 -
nginx配置的内存布局
nginx的配置系统很灵活,不但支持模块自定义配置项,而且支持多级配置以及合并多级配置项。这样的设计使得nginx的配置在内存中的布局也是分成多级的,比较复杂。因此,这里采用一种自顶向下的方式进行逐级剖析。这里需要先说明一下nginx指令的上下文环境以及有效上下文环境。nginx配置的上下文环境指的是指令在配置文件中的位置,比如配置文件全局,http块全局,http server块, mail原创 2018-02-02 16:49:00 · 3205 阅读 · 0 评论 -
nginx的模块加载顺序
nginx是按照模块类型的先后顺序来加载模块的,如下所示核心模块 > 事件模块 > 线程池模块 > http模块 > 邮件模块 > stream模块 > 其它模块核心模块加载顺序ngx_core_modulengx_errlog_modulengx_conf_modulengx_openssl_modulengx_原创 2018-02-02 15:20:22 · 1563 阅读 · 0 评论 -
nginx工作模式
nginx有两种工作模式:master-worker模式和单进程模式。在master-worker模式下,有一个master进程和至少一个的worker进程,单进程模式顾名思义只有一个进程。这两种模式有各自的特点和适用场景。master-worker该模式下,nginx启动成功后,会有一个master进程和至少一个的worker进程。master进程负责处理系统信号,加载配置,管理wo原创 2018-02-02 15:03:56 · 6688 阅读 · 0 评论 -
nginx配置解析过程分析
nginx在启动,reload和平滑升级时,都会重新加载配置。重新加载配置分成两步:1. 重新加载命令行参数(-g)中定义的全局配置2. 重新加载配置文件中的配置解析配置的核心函数是ngx_conf_parse,不论是解析命令行定义的全局配置还是解析配置文件内容,最终都会调用该函数。函数的原型如下:char *ngx_conf_parse(ngx_conf_t *cf, n原创 2018-02-02 14:39:46 · 1307 阅读 · 0 评论 -
ngx_cycle_t结构体及ngx_cycle_init函数分析
一 ngx_cycle_t结构体ngx_cycle_t对应于nginx的一次启动,配置重新加载,或者平滑升级。struct ngx_cycle_s { void ****conf_ctx;//配置上下文 ngx_pool_t *pool;//内存池 ngx_log_t原创 2018-02-01 18:57:41 · 507 阅读 · 0 评论 -
http框架核心之ngx_http.c源码分析
ngx_http.c内主要实现了一个模块:ngx_http_module。ngx_http_module是nginx的http框架的一部分,它是所有http模块能够被加载的唯一入口,承担了http块配置解析,合并,以及http框架及其相关数据结构的初始化。它本身是NGX_CORE_MODULE类型,只有一个指令,就是http,如下所示:static ngx_command_t ngx_http_...原创 2018-02-05 15:27:18 · 626 阅读 · 0 评论 -
nginx的配置文件及指令介绍
nginx的配置文件是由一系列的指令构成的。指令可以分为三种:注释,普通指令和块指令。nginx在解析配置文件时,只会解析普通指令和块指令,直接忽略注释,如下面的示例配置所示:#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_原创 2018-02-02 13:17:58 · 301 阅读 · 0 评论 -
nginx的模块化设计思想
nginx的代码中,除了部分底层的核心代码之外,基本上所有的功能都是通过模块化的方式实现的,这样的设计为nginx的功能拓展提供了极大的灵活性。nginx的模块贯穿了从启动,运行一直到结束的nginx进程的整个生命周期。实际上,在每个阶段,是由nginx核心以及模块自身的配置共同决定哪些模块可以参与,如何参与到当前阶段的运行中。目前,nginx支持多种类型的模块,它们功能定位各有不同,运行的上原创 2018-02-02 11:43:14 · 910 阅读 · 0 评论 -
nginx的基本数据结构
ngx_str_t源码文件:ngx_string.h|c定义:struct ngx_str_s { size_t len;//字符串长度 u_char *data;//字符串起始地址} ngx_str_t;说明:ngx_str_t是nginx使用的字符串类型,ngx_str_t用len成员来表示字符串的长度,c标准库中的原创 2018-02-01 19:16:17 · 489 阅读 · 0 评论 -
nginx的configure脚本分析
#!/bin/sh# Copyright (C) Igor Sysoev# Copyright (C) Nginx, Inc.LC_ALL=Cexport LC_ALL#options处理命令行选项,并根据选项值和默认值设置全局变量. auto/options#获取makefile,ngx_mo原创 2018-02-01 19:15:12 · 424 阅读 · 0 评论