解剖Nginx·自动脚本篇(3)源码相关变量脚本 auto/sources
在configure
脚本中,运行完auto/options
和auto/init
脚本后,接下来就运行auto/soures
脚本。这个脚本是为编译做准备的。
目录
- 核心模块
- 事件模块
- OpenSSL 模块相关变量
- 事件驱动模块
- 操作系统相关项
- HTTP 模块
- 邮件模块
- Google PerfTools 模块
- C++ 测试模块
1 核心模块
1.1 核心模块名称 CORE_MODULES
CORE_MODULES
变量记录 Nginx 的核心模块,默认包括ngx_core_module
、ngx_errlog_module
和ngx_conf_module
,相应初始化代码如下:
CORE_MODULES="ngx_core_module ngx_errlog_module ngx_conf_module"
1.2 核心模块头文件所在目录 CORE_INCS
INCS 的含义是 includes。
CORE_INCS="src/core"
1.3 核心模块头文件 CORE_DEPS
DEPS 的含义是 depandencies,包含src/core
目录下的 30 个源文件,唯独没有src/core/regex.h
文件。
CORE_DEPS="src/core/nginx.h \
src/core/ngx_config.h \
...
src/core/ngx_open_file_cache.h \
src/core/ngx_crypt.h"
1.4 核心模块源文件 CORE_SRCS
SRCS 的含义是 sources,包含src/core
目录下的 29 个源文件,仅仅没有src/core/regex.c
文件。
CORE_SRCS="src/core/nginx.c \
src/core/ngx_log.c \
...
src/core/ngx_open_file_cache.c \
src/core/ngx_crypt.c"
正则表达式的内容也是核心模块的一部分,分别是src/core/regex.h
和src/core/regex.c
。
REGEX_DEPS=src/core/ngx_regex.h
REGEX_SRCS=src/core/ngx_regex.c
2 事件模块
2.1 事件模块名称 EVENT_MODULES
该模块包括ngx_events_module
和ngx_event_core_module
。
EVENT_MODULES="ngx_events_module ngx_event_core_module"
2.2 事件模块头文件所在目录 EVENT_INCS
相应的头文件所在目录也包含两部分。
EVENT_INCS="src/event src/event/modules"
2.3 事件模块头文件 EVENT_DEPS
包括六个头文件,都位于src/event
目录下,唯独不包含该目录下的src/event/ngx_event_openssl.h
文件,该文件属于 OpenSSL 模块的头文件。
EVENT_DEPS="src/event/ngx_event.h \
src/event/ngx_event_timer.h \
src/event/ngx_event_posted.h \
src/event/ngx_event_busy_lock.h \
src/event/ngx_event_connect.h \
src/event/ngx_event_pipe.h"
2.4 事件模块源文件 EVENT_SRCS
包含七个头文件,都位于src/event
目录下,该目录下的另外两个文件ngx_event_openssl
和ngx_event_mutex
。
EVENT_SRCS="src/event/ngx_event.c \
src/event/ngx_event_timer.c \
src/event/ngx_event_posted.c \
src/event/ngx_event_busy_lock.c \
src/event/ngx_event_accept.c \
src/event/ngx_event_connect.c \
src/event/ngx_event_pipe.c"
3 OpenSSL 模块相关变量
3.1 OpenSSL 模块名称 OPENSSL_MODULE
OPENSSL_MODULE
:是 OpenSSL 变量的名称,为ngx_openssl_module
。
3.2 OpenSSl 模块源文件与头文件 OPENSSL_DEPS 和 OPENSSL_SRCS
OPENSSL_DEPS
和OPENSSL_SRCS
:是 OpenSSL 的源文件和头文件。
OPENSSL_MODULE=ngx_openssl_module
OPENSSL_DEPS=src/event/ngx_event_openssl.h
OPENSSL_SRCS=src/event/ngx_event_openssl.c
4 事件驱动模型
模型包括 select、poll、kqueue、devpoll、eventport、epoll、rtsig、iocp、aio。后面我会专门写一篇关于事件驱动方面的博文,来详细介绍这些事件驱动模型的原理和异同。这里先不赘述。
4.1 select 模型
SELECT_MODULE=ngx_select_module
SELECT_SRCS=src/event/modules/ngx_select_module.c
WIN32_SELECT_SRCS=src/event/modules/ngx_win32_select_module.c
4.2 poll 模型
POLL_MODULE=ngx_poll_module
POLL_SRCS=src/event/modules/ngx_poll_module.c
4.3 kqueue 模型
KQUEUE_MODULE=ngx_kqueue_module
KQUEUE_SRCS=src/event/modules/ngx_kqueue_module.c
4.4 devpoll 模型
DEVPOLL_MODULE=ngx_devpoll_module
DEVPOLL_SRCS=src/event/modules/ngx_devpoll_module.c
4.5 eventport 模型
EVENTPORT_MODULE=ngx_eventport_module
EVENTPORT_SRCS=src/event/modules/ngx_eventport_module.c
4.5 epoll 模型
EPOLL_MODULE=ngx_epoll_module
EPOLL_SRCS=src/event/modules/ngx_epoll_module.c
4.6 rtsig 模型
RTSIG_MODULE=ngx_rtsig_module
RTSIG_SRCS=src/event/modules/ngx_rtsig_module.c
4.7 iocp 模型
IOCP_MODULE=ngx_iocp_module
IOCP_SRCS=src/event/modules/ngx_iocp_module.c
4.8 aio 模型
AIO_MODULE=ngx_aio_module
AIO_SRCS="src/event/modules/ngx_aio_module.c \
src/os/unix/ngx_aio_read.c \
src/os/unix/ngx_aio_write.c \
src/os/unix/ngx_aio_read_chain.c \
src/os/unix/ngx_aio_write_chain.c"
FILE_AIO_SRCS="src/os/unix/ngx_file_aio_read.c"
LINUX_AIO_SRCS="src/os/unix/ngx_linux_aio_read.c"
5 操作系统相关项
5.1 UNIX
相关的头文件所在的目录为:
UNIX_INCS="$CORE_INCS $EVENT_INCS src/os/unix"
所有相关的头文件为:
UNIX_DEPS="$CORE_DEPS $EVENT_DEPS \
src/os/unix/ngx_time.h \
src/os/unix/ngx_errno.h \
...
src/os/unix/ngx_process_cycle.h"
所有相关的源文件为:
UNIX_SRCS="$CORE_SRCS $EVENT_SRCS \
src/os/unix/ngx_time.c \
src/os/unix/ngx_errno.c \
...
src/os/unix/ngx_process_cycle.c"
5.2 POSIX
POSIX_DEPS=src/os/unix/ngx_posix_config.h
5.3 FreeBSD
相关的头文件:
FREEBSD_DEPS="src/os/unix/ngx_freebsd_config.h src/os/unix/ngx_freebsd.h"
相关的源文件:
FREEBSD_SRCS=src/os/unix/ngx_freebsd_init.c
有关 Sendfile 机制的源文件:
FREEBSD_SENDFILE_SRCS=src/os/unix/ngx_freebsd_sendfile_chain.c
Rfork相关的文件:
FREEBSD_RFORK_DEPS="src/os/unix/ngx_freebsd_rfork_thread.h"
FREEBSD_RFORK_SRCS="src/os/unix/ngx_freebsd_rfork_thread.c"
FREEBSD_RFORK_THREAD_SRCS="src/os/unix/rfork_thread.S"
5.4 pthread
PTHREAD_SRCS="src/os/unix/ngx_pthread_thread.c"
5.5 Linux
相关的头文件:
LINUX_DEPS="src/os/unix/ngx_linux_config.h src/os/unix/ngx_linux.h"
相关的源文件:
LINUX_SRCS=src/os/unix/ngx_linux_init.c
有关 Sendfile 机制的源文件:
LINUX_SENDFILE_SRCS=src/os/unix/ngx_linux_sendfile_chain.c
5.6 Solaris
相关的头文件:
SOLARIS_DEPS="src/os/unix/ngx_solaris_config.h src/os/unix/ngx_solaris.h"
相关的源文件:
SOLARIS_SRCS=src/os/unix/ngx_solaris_init.c
有关 Sendfile 机制的源文件:
SOLARIS_SENDFILEV_SRCS=src/os/unix/ngx_solaris_sendfilev_chain.c
5.7 Darwin
相关的头文件:
DARWIN_DEPS="src/os/unix/ngx_darwin_config.h src/os/unix/ngx_darwin.h"
现骨干的源文件:
DARWIN_SRCS=src/os/unix/ngx_darwin_init.c
有关 Sendfile 机制的源文件:
DARWIN_SENDFILE_SRCS=src/os/unix/ngx_darwin_sendfile_chain.c
5.8 Win32
相关文件所在的目录:
WIN32_INCS="$CORE_INCS $EVENT_INCS src/os/win32"
相关的头文件:
WIN32_DEPS="$CORE_DEPS $EVENT_DEPS \
src/os/win32/ngx_win32_config.h \
src/os/win32/ngx_time.h \
...
src/os/win32/ngx_process_cycle.h"
相关的用于配置头文件:
WIN32_CONFIG=src/os/win32/ngx_win32_config.h
相关的源文件:
WIN32_SRCS="$CORE_SRCS $EVENT_SRCS \
src/os/win32/ngx_errno.c \
src/os/win32/ngx_alloc.c \
...
src/event/ngx_event_acceptex.c"
Nginx 在 Windows 平台的图标:
NGX_WIN32_ICONS="src/os/win32/nginx.ico"
Run Commands:
NGX_WIN32_RC="src/os/win32/nginx.rc"
6 HTTP 模块
6.1 HTTP 一些基本模块
注意这里的模块分类,与 Wiki 上给出的不一样,这四个并不是 Wiki 中的标准模块。模块名:
HTTP_MODULES="ngx_http_module \
ngx_http_core_module \
ngx_http_log_module \
ngx_http_upstream_module"
HTTP_WRITE_FILTER_MODULE="ngx_http_write_filter_module"
HTTP_HEADER_FILTER_MODULE="ngx_http_header_filter_module"
HTTP_POSTPONE_FILTER_MODULE=ngx_http_postpone_filter_module
HTTP_COPY_FILTER_MODULE=ngx_http_copy_filter_module
HTTP_CHUNKED_FILTER_MODULE=ngx_http_chunked_filter_module
HTTP_HEADERS_FILTER_MODULE=ngx_http_headers_filter_module
HTTP_RANGE_HEADER_FILTER_MODULE=ngx_http_range_header_filter_module
HTTP_RANGE_BODY_FILTER_MODULE=ngx_http_range_body_filter_module
HTTP_NOT_MODIFIED_FILTER_MODULE=ngx_http_not_modified_filter_module
HTTP_STATIC_MODULE=ngx_http_static_module
HTTP_INDEX_MODULE=ngx_http_index_module
相关的头文件所在的目录为:
HTTP_INCS="src/http src/http/modules"
所有相关的头文件为:
HTTP_DEPS="src/http/ngx_http.h \
src/http/ngx_http_request.h \
src/http/ngx_http_config.h \
src/http/ngx_http_core_module.h \
src/http/ngx_http_cache.h \
src/http/ngx_http_variables.h \
src/http/ngx_http_script.h \
src/http/ngx_http_upstream.h \
src/http/ngx_http_upstream_round_robin.h \
src/http/ngx_http_busy_lock.h"
所有相关的源文件为:
HTTP_SRCS="src/http/ngx_http.c \
src/http/ngx_http_core_module.c \
…
src/http/modules/ngx_http_not_modified_filter_module.c"
HTTP_SRCS="$HTTP_SRCS src/http/ngx_http_busy_lock.c"
6.2 其他 HTTP 模块
下面这些变量是关于一些 HTTP 模块的:
HTTP_POSTPONE_FILTER_SRCS=src/http/ngx_http_postpone_filter_module.c
HTTP_FILE_CACHE_SRCS=src/http/ngx_http_file_cache.c
HTTP_SSI_FILTER_MODULE=ngx_http_ssi_filter_module
HTTP_SSI_DEPS=src/http/modules/ngx_http_ssi_filter_module.h
HTTP_SSI_SRCS=src/http/modules/ngx_http_ssi_filter_module.c
HTTP_SSL_MODULE=ngx_http_ssl_module
HTTP_SSL_DEPS=src/http/modules/ngx_http_ssl_module.h
HTTP_SSL_SRCS=src/http/modules/ngx_http_ssl_module.c
HTTP_PERL_MODULE=ngx_http_perl_module
HTTP_PERL_INCS=src/http/modules/perl
HTTP_PERL_DEPS=src/http/modules/perl/ngx_http_perl_module.h
HTTP_PERL_SRCS=src/http/modules/perl/ngx_http_perl_module.c
其 他一些模块,只设置了形如 HTTP_XXX_MODULE 和 HTTP_XXX_SRCS 的变量,包括 charset-filter,gzip-filter,xslt-filter,image-filter,sub-filter,userid- filter,realip,addiction-filter,dav,access,auth- basic,autoindex,random,status,geo,geoip,map,split- clients,referer,rewrite,proxy,fastcgi,uwsgi,scgi,memcached,limit- zone,limite-req,empty-gif,browser,secure- link,degradation,flv,mp4,gzip,upstream-ip-hash,例如:
HTTP_CHARSET_FILTER_MODULE=ngx_http_charset_filter_module
HTTP_CHARSET_SRCS=src/http/modules/ngx_http_charset_filter_module.c
HTTP_GZIP_FILTER_MODULE=ngx_http_gzip_filter_module
HTTP_GZIP_SRCS=src/http/modules/ngx_http_gzip_filter_module.c
7 邮件模块
头文件所在的目录:
MAIL_INCS="src/mail"
头文件:
MAIL_DEPS="src/mail/ngx_mail.h"
模块名称:
MAIL_MODULES="ngx_mail_module ngx_mail_core_module"
源文件:
MAIL_SRCS="src/mail/ngx_mail.c \
src/mail/ngx_mail_core_module.c \
src/mail/ngx_mail_handler.c \
src/mail/ngx_mail_parse.c"
一些模块的相关变量,包括 POP3、IMAP、SMTP、SSL、AUTH-HTTP、PROXY 模块:
MAIL_POP3_MODULE="ngx_mail_pop3_module"
MAIL_POP3_DEPS="src/mail/ngx_mail_pop3_module.h"
MAIL_POP3_SRCS="src/mail/ngx_mail_pop3_module.c \
src/mail/ngx_mail_pop3_handler.c"
MAIL_IMAP_MODULE="ngx_mail_imap_module"
MAIL_IMAP_DEPS="src/mail/ngx_mail_imap_module.h"
MAIL_IMAP_SRCS="src/mail/ngx_mail_imap_module.c \
src/mail/ngx_mail_imap_handler.c"
MAIL_SMTP_MODULE="ngx_mail_smtp_module"
MAIL_SMTP_DEPS="src/mail/ngx_mail_smtp_module.h"
MAIL_SMTP_SRCS="src/mail/ngx_mail_smtp_module.c \
src/mail/ngx_mail_smtp_handler.c"
MAIL_SSL_MODULE="ngx_mail_ssl_module"
MAIL_SSL_DEPS="src/mail/ngx_mail_ssl_module.h"
MAIL_SSL_SRCS="src/mail/ngx_mail_ssl_module.c"
MAIL_AUTH_HTTP_MODULE="ngx_mail_auth_http_module"
MAIL_AUTH_HTTP_SRCS="src/mail/ngx_mail_auth_http_module.c"
MAIL_PROXY_MODULE="ngx_mail_proxy_module"
MAIL_PROXY_SRCS="src/mail/ngx_mail_proxy_module.c"
8 Google PerfTools 模块
NGX_GOOGLE_PERFTOOLS_MODULE=ngx_google_perftools_module
NGX_GOOGLE_PERFTOOLS_SRCS=src/misc/ngx_google_perftools_module.c
9 C++ 测试模块
NGX_CPP_TEST_SRCS=src/misc/ngx_cpp_test_module.cpp
解剖Nginx·自动脚本篇(3)源码相关变量脚本 auto/sources的更多相关文章
- 解剖Nginx·自动脚本篇(5)编译器相关主脚本
在 Nginx 的自动脚本中,auto/cc目录下的所有脚本都是用于编译器相关配置使用的.Nginx的出色跨平台性(Linux.Darwin.Solaris.Win32 等)就有这些脚本的贡献.该目录 ...
- Shell脚本一键部署——源码编译安装MySQL及自动补全工具
Shell脚本一键部署--源码编译安装MySQL及自动补全工具 编译安装MySQL 1.软件包 Mysql安装包 将安装包拖至/opt目录下,编辑一个脚本文件,将以下内容复制进去,然后source或者 ...
- 鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析OpenHarmony源码 | v58.01
百篇博客系列篇.本篇为: v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o 本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿 ...
- Linux系列教程(十三)——Linux软件包管理之源码包、脚本安装包
上篇博客我们讲解了网络yum源和光盘yum源的搭建步骤,然后详细介绍了相关的yum命令,yum 最重要是解决了软件包依赖性问题.在安装软件时,我们使用yum命令将会简单方便很多.我们知道yum命令只能 ...
- Linux软件包管理之源码包、脚本安装包
目录 1.源码包和RPM包的区别 RPM包和源码包默认安装位置: 由于安装位置不同带来的影响 2.源码包安装 ①.安装准备 ②.安装注意事项 ③.安装源码包 3.源码包卸载 4.脚本安装包 5.总结 ...
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
- LAMP最新源码一键安装脚本
Linux+Apache+MySQL+PHP (脚本可以选择是否安装+Pureftpd+User manager for PureFTPd+phpMyAdmin+memcache),添加虚拟主机请执行 ...
- 老李推荐:第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例 1
老李推荐:第3章3节<MonkeyRunner源码剖析>脚本编写示例: MonkeyImage API使用示例 在上一节的第一个“增加日记”的示例中,我们并没有看到日记是否真的增加成功 ...
- 老李推荐: 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例
老李推荐: 第3章1节<MonkeyRunner源码剖析>脚本编写示例: MonkeyRunner API使用示例 MonkeyRunner这个类可以说是编写monkeyrunner脚 ...
随机推荐
- 利用mysqldump备份mysql
mysqldump备份机制:通过给定的参数信息和系统表数据,来一张表一张表地获取数据并生成insert语句插入备份文件中,这样由于时间点不一致,就会导致数据不一致,然而对于一个要求强一致性的系统来说, ...
- c/c++指针详解(二)
指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占 ...
- bzoj4806 炮
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4806 这种题应该想状压的. 于是发现压不下,结合每一行每一列最多放两个炮想到记一下放炮的列就 ...
- bootstrap的折叠组件1
官网的例子: http://v3.bootcss.com/javascript/#collapse <div class="panel-group" id="acc ...
- 网络网关TCP/IP
vmware中的4种网络连接模式 2008-11-13 11:11:21 分类: 系统运维 很多朋友都用vmware来测试不同的系统,我结合自己的经验谈一下对网络设置的理解,不对的地方请指正. bri ...
- zufeoj NO.1(结构体简单题)
NO.1 时间限制: 1 Sec 内存限制: 128 MB提交: 457 解决: 172[提交][状态][讨论版] 题目描述 所谓NO.1,就是所有成绩都排在第一的同学,我们假设每个人只有理科,文 ...
- Oracle通过JDBC插入数据时,自增ID如何自动增长
一.通过触发器的方式 CREATE OR REPLACE TRIGGER tg_test BEFORE INSERT ON Userinfo FOR EACH ROW WHEN (new.userNo ...
- nginx上传文件大小
采用nginx作反向代理,出现了一个诡异的问题,小文件可以提交,大文件会报500内部错误.这个是什么原因导致的呢? 查wiki可知,上传文件大小相关的有三个配置 client_body_buffer_ ...
- 一种SequenceFile的格式研究
最近仔细研究了以下公司中使用的SequenceFile文件格式,SequenceFile的格式比较紧凑,实现了从中间读取文件内容(便于hadoop将文件进行适当地切分),同时也可以支持仅读取文件的元数 ...
- kubernetes 学习 pod相关
1 pod的状态: Pending, Running, Succeeded, Failed, Unknown 2 pod重启策略: Always(自动重启,是默认的) . OnFailure(容 ...