在configure脚本中,运行完auto/options和auto/init脚本后,接下来就运行auto/sources脚本。这个脚本是为编译做准备的,定义了所有需要编译的modules,以及编译这些modules需要哪些源文件。
这些需要编译的modules都会通过脚本的方式写到ngx_modules.c文件中,然后编译进整个应用程序。因此nginx在启动时才知道自己需要启动那些modules。这种做法的一个好处就是,人们可以扩充很多modules,但是我们可以通过脚本的方式控制需要编译哪些,而不会造成任何不必要的代码被编译进nginx应用程序。
参看:http://blog.csdn.net/poechant/article/details/7327217
1. auto/sources脚本
在分析脚本之前,我们这里贴出其源代码:
在auto/sources脚本中,其一般采用如下4个变量来定义一个模块:
- 模块名称
- 模块头文件所在目录
- 模块头文件
- 模块源代码文件
2. nginx核心模块
nginx核心模块是整个nginx运行的一个最基本框架,其他任何模块的运行都需要依赖于这个核心模块。因此如果我们自己想要复用nginx来编写一个最简单的应用程序,其他模块都可以被裁减掉,然而核心模块是必不可少的.
(1) 模块名称
nginx核心模块名称为CORE_MODULES
,该变量记录了nginx的核心模块。默认包括:ngx_core_module、ngx_errlog_module和ngx_conf_module。相应初始化代码如下:
(2) 模块头文件所在目录
CORE_INCS
变量记录了nginx核心模块所在的目录:
(3) 模块头文件
CORE_DEPS
变量记录了nginx核心模块所依赖的头文件。DEPS的含义为dependencies。其包含src/core/目录下的35个头文件,唯独没有包括为src/core/ngx_regex.h和src/core/ngx_thread_pool.h这两个:
(4) 模块源代码文件
CORE_SRCS
变量记录了nginx核心模块所依赖的源代码文件。SRCS的含义是sources,包含src/core目录下的34个源文件,仅仅没有包含src/core/ngx_regex.c和src/core/ngx_thread_pool.c这两个:
3. nginx事件模块
nginx事件模块包含定时器事件和网络事件两种。
(1) 模块名称
nginx事件模块名称为EVENT_MODULES
,该变量记录了nginx的事件模块。该模块包括:ngx_events_module和ngx_event_core_module.
(2) 模块头文件所在目录
EVENT_INCS
变量记录了nginx事件模块所在的目录:
(3) 模块头文件
EVENT_DEPS
变量记录了nginx事件模块所依赖的头文件。总共包括5个头文件,都在src/event目录下,唯独不包括该目录下的src/event/ngx_event_openssl.h文件,该文件属于openssl模块的头文件:
(4) 模块源代码文件
EVENT_SRCS
变量就了nginx事件模块所依赖的源代码文件。总共包含6个源文件,都在src/event目录下,唯独不包含该目录下的src/event/ngx_event_openssl.c和src/event/ngx_event_openssl_stapling.c源文件:
4. 事件驱动模型
nginx事件驱动模型包括包括:select、poll、kqueue、devpoll、eventport、epoll、iocp、aiso。其实它是属于上面nginx事件模块的一部分,存在于上面nginx事件模块头文件目录的src/event/modules目录下。后面我们会专门详细介绍这些事件驱动模型的原理和异同,这里不赘述。
(1) select模型
(2) poll模型
(3) kqueue模型
(4) devpoll模型
(5) eventport模型
(6) epoll模型
(7) iocp模型
(8) aio模型
5. 操作系统相关
这里从整体上分为类Unix和Windows两大操作系统。我们分成两部分来讲解。
5.1 类Unix操作系统
相关头文件所在目录为:
所有Unix相关头文件:
所有Unix相关源文件:
posix相关配置头文件:
多线程模块:
注:thread pool是较新版本的nginx新添加的一个线程池模块
如下是具体的类Unix操作系统的一些实现:
(1) freebsd操作系统
freebsd操作系统相关头文件、源文件、以及sendfile机制的源文件:
(2) linux操作系统
linux操作系统相关头文件、源文件、以及sendfile机制的源文件:
(3) solaris操作系统
solaris操作系统相关头文件、源文件、以及sendfile机制的源文件:
(4) darwin操作系统
darwin操作系统相关头文件、源文件、以及sendfile机制的源文件:
5.2 Windows操作系统
windows平台相关头文件所在目录:
windows平台相关头文件:
windows相关配置头文件:
windows相关源代码文件:
nginx在windows平台的图表及资源文件:
6. HTTP缓存相关头文件