解剖Nginx·自动脚本篇

来源:互联网 发布:网页淘宝卡券包在哪里 编辑:程序博客网 时间:2024/05/17 09:34

剖 Nginx ·自动脚本篇(1)解析配置选项脚本 auto/options

  • Author: Poechant
  • Blog: blog.CSDN.net/Poechant
  • Email: zhongchao.ustc#gmail.com (#->@)
  • Date: March 4th, 2012
  • Copyright © 柳大·Poechant

在安装Nginx之前(即运行make脚本之前),首先是进行安装的配置准备,包括环境检查及生成文件。这些工作是由自动脚本完成的。和绝大多数软件一样,Nginx的自动脚本的入口,同样是名为configure的文件。

除了configure,其他的自动脚本都在auto目录下。通过分析configure脚本源码,我们可以看到,configure首先运行了auto目录下的几个自动脚本,如下:

. auto/options. auto/init. auto/sources

其中通过运行auto/options脚本,来设定配置选项。下面将逐步分析auto/options脚本是如何工作的。

1 读取configure配置参数

开始先声明了 N 多变量,然后最主要的部分从这段开始:

opt=for option    do    ...done

这段实际上是处理运行./configure的时候携带的参数选项,for循环每次对应一个参数选项 option。要注意for循环体上面有一个全局的opt变量。这个循环体内的第一个语句是最重要是,它是:

opt="$opt `echo $option | sed -e \"s/\(--[^=]*=\)\(.* .*\)/\1'\2'/\"`"

通过循环运行该语句后,opt的值就是一个由空格来分隔的参数列表。然后在循环体中接下来是一个case-esac,用来得到参数值,如下:

case "$option" in    -*=*) value=`echo "$option" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;;       *) value="" ;;esac

其含义是将value赋值为参数选项值,如果选项值不与-*=*的模式匹配,则value值为""。接下来的case-esac语句用来匹配参数的类型。

    case "$option" in        --help)                          help=yes                   ;;        --prefix=)                       NGX_PREFIX="!"             ;;        --prefix=*)                      NGX_PREFIX="$value"        ;;        --sbin-path=*)                   NGX_SBIN_PATH="$value"     ;;        --conf-path=*)                   NGX_CONF_PATH="$value"     ;;        ...    esac

各匹配的分支语句中进行配置变量的赋值。这些变量在auto/options脚本的最开始处赋以默认值,其中那些模块配置变量被赋以YES的表示默认开启,赋以NO的表示默认关闭。但它们开启与否由这个auto/options中的case-esac语句来决定。还有一些是安装相关的选项变量也在这里被赋值,比如:

  • prefix参数值被赋予NGX_PREFIX
  • sbin-path参数值被赋予NGX_SBIN_PATH
  • conf-path参数值被赋予NGX_CONF_PATH
  • error-log-path参数值被赋予NGX_ERROR_LOG_PATH
  • pid-path参数值被赋予NGX_PID_PATH
  • lock-path参数值被赋予NGX_LOCK_PATH

如果option并不符合预设的这些匹配,也就是用户使用configure脚本的时候携带的参数错误,则auto/options会匹配该语句:

*)    echo "$0: error: invalid option \"$option\""    exit 1

从而提示用户参数错误,并使脚本退出运行。经过多次循环,for-do-done就结束。

2 设定NGX_CONFIGURE变量

处理完所有option后,opt就如我们上面提到的,成为由空格分割的配置项值,并被赋给NGX_CONFIGURE变量:

NGX_CONFIGURE="$opt"

3 是否显示configure的帮助信息

再看下面这句:

if [ $help = yes ]; thencat << END    …END    exit 1fi

默认情况下$help变量值在初始化时就为no。如果configure选项中指定了help参数,则$help参数为yes,则会运行cat命令,显示大段的帮助信息,然后退出。

4 是否关闭 HTTP 功能

默认情况下HTTP的一些基本功能是被开启的,如果用户指定了--without-http参数,则变量HTTP会被赋值为NO,则下面这段代码if-fi中的语句会被执行:

if [ $HTTP = NO ]; then    HTTP_CHARSET=NO    HTTP_GZIP=NO    HTTP_SSI=NO    HTTP_USERID=NO    HTTP_ACCESS=NO    HTTP_STATUS=NO    HTTP_REWRITE=NO    HTTP_PROXY=NO    HTTP_FASTCGI=NOfi

5 是否指定运行于 Windows 平台

如果显式指定了--crossbuild参数,则变量NGX_PLATFORM会被赋予当前for-do-done循环中的"$value"值,也就是--crossbuild的参数值,一般在考虑在Windows平台使用时才会用到,看下面的语句:

if [ ".$NGX_PLATFORM" = ".win32" ]; then    NGX_WINE=$WINEfi

如果指定--crossbuild=win32,则NGX_WINE就会被赋值了。

6 Nginx 配置文件路径

在加载configure的参数时,如果没有指定了--conf-path参数,则$NGX_CONF_PATH变量是没有值的,则下面的语句会为NGX_CONF_PATH赋以conf/nginx.conf的缺省值。不过我在想老毛子 Igor Sysoev 同学完全可以在auto/options开始处和其他参数一样先指定NGX_CONF_PATH的默认值。

NGX_CONF_PATH=${NGX_CONF_PATH:-conf/nginx.conf}

然后获取配置文件所在目录的:

NGX_CONF_PREFIX=`dirname $NGX_CONF_PATH`

如果指定参数--conf-path=/home/michael/nginx/conf/nginx.conf,则NGX_CONF_PREFIX的值就是/home/michael/nginx/conf

7 Nginx 进程 ID 文件和锁文件路径

下面是同样的方式初始化NGX_PID_PATHNGX_LOCK_PATH,分别对应configure参数--pid-path--lock-path,其缺省值分别为logs/nginx.pidlogs/nginx.lock

NGX_PID_PATH=${NGX_PID_PATH:-logs/nginx.pid}NGX_LOCK_PATH=${NGX_LOCK_PATH:-logs/nginx.lock}

8 错误日志文件路径

如果指定了参数--error-log-pathNGX_ERROR_LOG_PATH变量的值会被指定,根据下面的语句,如果指定的是stderr则将NGX_ERROR_LOG_PATH修改为空,即不需要错误日志文件。如果不是标准输出,且其值为空,则设置为缺省值logs/error.log

if [ ".$NGX_ERROR_LOG_PATH" = ".stderr" ]; then    NGX_ERROR_LOG_PATH=else    NGX_ERROR_LOG_PATH=${NGX_ERROR_LOG_PATH:-logs/error.log}fi

9 HTTP 相关各路径

NGX_HTTP_LOG_PATH=${NGX_HTTP_LOG_PATH:-logs/access.log}NGX_HTTP_CLIENT_TEMP_PATH=${NGX_HTTP_CLIENT_TEMP_PATH:-client_body_temp}NGX_HTTP_PROXY_TEMP_PATH=${NGX_HTTP_PROXY_TEMP_PATH:-proxy_temp}NGX_HTTP_FASTCGI_TEMP_PATH=${NGX_HTTP_FASTCGI_TEMP_PATH:-fastcgi_temp}NGX_HTTP_UWSGI_TEMP_PATH=${NGX_HTTP_UWSGI_TEMP_PATH:-uwsgi_temp}NGX_HTTP_SCGI_TEMP_PATH=${NGX_HTTP_SCGI_TEMP_PATH:-scgi_temp}

10 Perl 模块

如果指定了--with-perl_modules_path参数,则NGX_PERL_MODULES变量即被设定。如果指定的值为一个绝对路径或未指定(空),则当做相对路径来处理,设定为$NGX_PREFIX/$NGX_PERL_MODULES

case ".$NGX_PERL_MODULES" in    ./*)    ;;    .)    ;;    *)        NGX_PERL_MODULES=$NGX_PREFIX/$NGX_PERL_MODULES    ;;esac

11 小结

通过运行auto/options脚本,所有的配置项已经被正确解析并加载到相应的配置变量中了。



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

  • Author: Poechant
  • Blog: blog.CSDN.net/Poechant
  • Email: zhongchao.ustc#gmail.com (#->@)
  • Date: March 4th, 2012
  • Copyright © 柳大·Poechant

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_headers.h
  • objs/ngx_auto_config.h

代码如下:

NGX_AUTO_HEADERS_H=$NGX_OBJS/ngx_auto_headers.hNGX_AUTO_CONFIG_H=$NGX_OBJS/ngx_auto_config.h

4 自动测试文件名与配置错误文件名变量

默认情况下是:

  • objs/autotest
  • objs/autoconf.err

代码如下:

NGX_AUTOTEST=$NGX_OBJS/autotestNGX_AUTOCONF_ERR=$NGX_OBJS/autoconf.err

5 STUBS 相关变量

默认情况下是:

  • objs/autoconf.err
  • objs/Makefile

代码如下:

# STUBsNGX_ERR=$NGX_OBJS/autoconf.errMAKEFILE=$NGX_OBJS/Makefile

6 PCH 相关变量

代码如下:

NGX_PCH=NGX_USE_PCH=

7 测试所在环境下"\c"和"-n"

由于 Nginx 支持多种操作系统,比如 Mac OS、Linux、Solaris 等。不同的系统下的 Shell 也小有差别。所以在auto/init脚本中有如下两个变量:

  • ngx_n
  • ngx_c

代码如下:

# check the echo's "-n" option and "\c" capabilityif echo "test\c" | grep c >/dev/null; then    if echo -n test | grep n >/dev/null; then        ngx_n=        ngx_c=    else        ngx_n=-n        ngx_c=    fielse    ngx_n=    ngx_c='\c'fi

8 创建并写入 Makefile

还有两个 targets,default 执行 build,clean 执行rm -rf Makefile $NGX_OBJS

# create Makefilecat << END > Makefiledefault:    buildclean:    rm -rf Makefile $NGX_OBJS

-

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

  • Author: Poechant
  • Blog: blog.CSDN.net/Poechant
  • Email: zhongchao.ustc#gmail.com (#->@)
  • Date: March 6th, 2012
  • Copyright © 柳大·Poechant

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.hREGEX_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_moduleOPENSSL_DEPS=src/event/ngx_event_openssl.hOPENSSL_SRCS=src/event/ngx_event_openssl.c

4 事件驱动模型

模型包括 select、poll、kqueue、devpoll、eventport、epoll、rtsig、iocp、aio。后面我会专门写一篇关于事件驱动方面的博文,来详细介绍这些事件驱动模型的原理和异同。这里先不赘述。

4.1 select 模型

SELECT_MODULE=ngx_select_moduleSELECT_SRCS=src/event/modules/ngx_select_module.cWIN32_SELECT_SRCS=src/event/modules/ngx_win32_select_module.c

4.2 poll 模型

POLL_MODULE=ngx_poll_modulePOLL_SRCS=src/event/modules/ngx_poll_module.c

4.3 kqueue 模型

KQUEUE_MODULE=ngx_kqueue_moduleKQUEUE_SRCS=src/event/modules/ngx_kqueue_module.c

4.4 devpoll 模型

DEVPOLL_MODULE=ngx_devpoll_moduleDEVPOLL_SRCS=src/event/modules/ngx_devpoll_module.c

4.5 eventport 模型

EVENTPORT_MODULE=ngx_eventport_moduleEVENTPORT_SRCS=src/event/modules/ngx_eventport_module.c

4.5 epoll 模型

EPOLL_MODULE=ngx_epoll_moduleEPOLL_SRCS=src/event/modules/ngx_epoll_module.c

4.6 rtsig 模型

RTSIG_MODULE=ngx_rtsig_moduleRTSIG_SRCS=src/event/modules/ngx_rtsig_module.c

4.7 iocp 模型

IOCP_MODULE=ngx_iocp_moduleIOCP_SRCS=src/event/modules/ngx_iocp_module.c

4.8 aio 模型

AIO_MODULE=ngx_aio_moduleAIO_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_moduleHTTP_COPY_FILTER_MODULE=ngx_http_copy_filter_moduleHTTP_CHUNKED_FILTER_MODULE=ngx_http_chunked_filter_moduleHTTP_HEADERS_FILTER_MODULE=ngx_http_headers_filter_moduleHTTP_RANGE_HEADER_FILTER_MODULE=ngx_http_range_header_filter_moduleHTTP_RANGE_BODY_FILTER_MODULE=ngx_http_range_body_filter_moduleHTTP_NOT_MODIFIED_FILTER_MODULE=ngx_http_not_modified_filter_moduleHTTP_STATIC_MODULE=ngx_http_static_moduleHTTP_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.cHTTP_FILE_CACHE_SRCS=src/http/ngx_http_file_cache.cHTTP_SSI_FILTER_MODULE=ngx_http_ssi_filter_moduleHTTP_SSI_DEPS=src/http/modules/ngx_http_ssi_filter_module.hHTTP_SSI_SRCS=src/http/modules/ngx_http_ssi_filter_module.cHTTP_SSL_MODULE=ngx_http_ssl_moduleHTTP_SSL_DEPS=src/http/modules/ngx_http_ssl_module.hHTTP_SSL_SRCS=src/http/modules/ngx_http_ssl_module.cHTTP_PERL_MODULE=ngx_http_perl_moduleHTTP_PERL_INCS=src/http/modules/perlHTTP_PERL_DEPS=src/http/modules/perl/ngx_http_perl_module.hHTTP_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_moduleHTTP_CHARSET_SRCS=src/http/modules/ngx_http_charset_filter_module.cHTTP_GZIP_FILTER_MODULE=ngx_http_gzip_filter_moduleHTTP_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_moduleNGX_GOOGLE_PERFTOOLS_SRCS=src/misc/ngx_google_perftools_module.c

9 C++ 测试模块

NGX_CPP_TEST_SRCS=src/misc/ngx_cpp_test_module.cpp

-


0 0
原创粉丝点击