解剖Nginx·自动脚本篇(3)源码相关变量脚本 auto/sources

configure脚本中,运行完auto/optionsauto/init脚本后,接下来就运行auto/soures脚本。这个脚本是为编译做准备的。

目录

  1. 核心模块
  2. 事件模块
  3. OpenSSL 模块相关变量
  4. 事件驱动模块
  5. 操作系统相关项
  6. HTTP 模块
  7. 邮件模块
  8. Google PerfTools 模块
  9. C++ 测试模块

1 核心模块

1.1 核心模块名称 CORE_MODULES

CORE_MODULES变量记录 Nginx 的核心模块,默认包括ngx_core_modulengx_errlog_modulengx_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.hsrc/core/regex.c

REGEX_DEPS=src/core/ngx_regex.h
REGEX_SRCS=src/core/ngx_regex.c

2 事件模块

2.1 事件模块名称 EVENT_MODULES

该模块包括ngx_events_modulengx_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_opensslngx_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_DEPSOPENSSL_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
时间: 2024-11-05 20:41:56

解剖Nginx·自动脚本篇(3)源码相关变量脚本 auto/sources的相关文章

解剖Nginx·自动脚本篇(5)编译器相关主脚本

在 Nginx 的自动脚本中,auto/cc目录下的所有脚本都是用于编译器相关配置使用的.Nginx的出色跨平台性(Linux.Darwin.Solaris.Win32 等)就有这些脚本的贡献.该目录下包含如下脚本: 目录 conf:主脚本,配置编译器的基本属性,并根据系统的编译器环境引用不同的脚本. name:与编译器名称相关的处理逻辑在该脚本中. gcc:GNU C 编译器的 Specified 配置. sunc:Sun C 编译器的 Specified 配置. acc:HP ANSI C+

Centos 7.0 编译安装LNMP(Linxu+nginx+mysql+php)之源码安装nginx (一)

nginx简介:       Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日. 其将源代码以类BSD许可证的形式发布,因它的稳定性.丰富的功能集.示例配置文件和低系统资源的消耗而闻名.2011年6月1日,nginx 1.0.4发布. Nginx是一款轻量级的Web 服务器

Redis源码学习-Lua脚本

Redis源码学习-Lua脚本 1.Sublime Text配置 我是在Win7下,用Sublime Text + Cygwin开发的,配置方法请参考<Sublime Text 3下C/C++开发环境搭建>. 要注意的是:在Cygwin中安装Lua解析器后,SublimeClang插件就能识别出可饮用的Lua头文件了,因为Build System中我们已经配置过"-I", "D:\\cygwin64\\usr\\include",而新安装的Lua头文件会

C#实现自动升级(附源码)

对于PC桌面应用程序而言,自动升级功能往往是必不可少的.而自动升级可以作为一个独立的C/S系统来开发,这样,就可以在不同的桌面应用中进行复用.本文将着重介绍OAUS的相关背景.使用方法,至于详细的实现细节,大家可以直接下载源码研究.如果了解了OAUS的使用,源码的理解就非常容易了.如果需要直接部署使用自动升级系统,那么,可下载文末的可执行程序压缩包. 一.OAUS的主要功能 目前主流的程序自动升级策略是,重新下载最新的安装包,然后重新安装整个客户端.这种方式虽然简单直观,但是缺陷也很明显.比如,

解剖Nginx&#183;自动脚本篇(4)工具型脚本系列

目录 auto/have 向自动配置头文件追加可用宏定义(objs/ngx_auto_config.h) auto/nohave 向自动配置头文件追加不可用宏定义(objs/ngx_auto_config.h) auto/define 向自动配置脚本追加 K-V 宏定义(objs/ngx_auto_config.h),表示“设置了 K,其值为 V” auto/have_headers 向自动头头文件(objs/ngx_auto_header.h) auto/feature auto/types/

解剖Nginx&#183;自动脚本篇(1)解析配置选项脚本 auto/options

在安装Nginx之前(即运行make脚本之前),首先是进行安装的配置准备,包括环境检查及生成文件.这些工作是由自动脚本完成的.和绝大多数软件一样,Nginx的自动脚本的入口,同样是名为configure的文件. 除了configure,其他的自动脚本都在auto目录下.通过分析configure脚本源码,我们可以看到,configure首先运行了auto目录下的几个自动脚本,如下: . auto/options . auto/init . auto/sources 其中通过运行auto/opti

解剖Nginx&#183;自动脚本篇(2)设置初始变量脚本 auto/init

在configure中运行完auto/options脚本后,接着运行auto/init脚本,其中所做的工作如下. 1 Makefile文件名变量 默认情况下是: objs/Makefile 代码如下: NGX_MAKEFILE=$NGX_OBJS/Makefile 2 源文件名变量 默认情况下是: objs/ngx_modules.c 代码如下: NGX_MODULES_C=$NGX_OBJS/ngx_modules.c 3 头文件名变量 默认情况下是: objs/ngx_auto_header

第一篇:白话tornado源码之一个脚本引发的血案

本系列博文计划: 1.剖析基于Python的Web框架Tornado的源码 2.为Python开发一个完善的MVC框架 首先将带着大家一起来剖析基于python编写的Web框架 tornado ,本着易读易懂的目标来写这一系列,寄希让小白也能zeng明白其中的道理,与其说剖析还不如说是白话,因为本系列都会用通俗的语言去描述Web框架中的各个知识点. 一个脚本引发的一场“血案”.... 运行脚本并在浏览器上访问http://127.0.0.1:8080 + 注意:对于上述的demo来说,我们没有对

高性能web服务器nginx(三)之源码搭建LNMP

一.环境准备 1.关闭防火墙及selinux [[email protected] ~]# iptables -F [[email protected] ~]# getenforce  Disabled 2.更改yum源(此步根据自身需要更改) [[email protected] ~]# wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/Centos-6.repo [[email protected] ~]# mv /etc/yu