nginx初探(1)--nginx安装过程详解、configure执行过程

来源:互联网 发布:微信朋友圈封面知乎 编辑:程序博客网 时间:2024/06/14 21:48

安装 :

tar -zxvf nginx-1.10.2.tar.gz
./configure
make
make install
nginx的./configure脚本做了很多工作,例如环境检测、参数解析、目录生成、Makefile文件的生成等。

一、nginx的configure
1.configure的命令参数
运行./configure –help 可以看到大量的参数显示。
configure的参数分为四大类:1.路径相关2.编译相关3.依赖软件相关4.模块相关
例如:
这里写图片描述
参数很多,不一一列出,摘取一些常用的贴下来:

–prefix
指定部署根目录,默认是/usr/local/nginx.此设置会更改其他配置目录的相对路径
–sbin-path
可执行文件的路径,默认为/sbin/nginx
–conf-path
配置文件的路径,默认为/conf/nginx.conf
–pid-path
pid文件的存放路径,默认存放在/logs/nginx.pid,是一个存放nginx的master进程ID的纯文本文件,刚安装的时候不会生成,nginx启动的时候会自动生成。
–http-log-path
access日志存放位置,每个http的请求在结束的时候都会访问的日志。
–with-ld-opt
加入第三方链接时需要的参数。编译之后nginx最终的可执行二进制文件是由编译后的目标文件和一些第三方的库链接生成的。如果想要将某个库链接到nginx中,就需要指定–with-ld-opt=目标库名-目标库路径
–with-debug
将nginx需要打印debug调试级别日志的代码编译进nginx,这样才可以通过修改配置文件将调试日志打印出来,便于定位服务问题
2.configure的执行流程
configure是一个shell脚本,参照configure的脚本内容就能看出其作用。

!/bin/sh

Copyright (C) Igor Sysoev

Copyright (C) Nginx, Inc.

LC_ALL=C
export LC_ALL

auto/options脚本处理的是configure命令的参数,定义了后续会使用到的变量

. auto/options

auto/init脚本初始化之后将产生的文本路径。

. auto/init

auto/sources脚本用于分析nginx的源码结构,用于构造后续的makefile文件等。

. auto/sources

编译过程中所有的目标文件由–buildder=DIR参数指定,默认情况下为/objs,用于创建此目录

test -d NGXOBJS||mkdirpNGX_OBJS

开始准备建立ngx_auto_headers、autoconf.err等必要的编译文件

echo > NGXAUTOHEADERSHecho>NGX_AUTOCONF_ERR

向/nginx/objs/ngx_auto_config.h写入宏

echo “#define NGX_CONFIGURE \”NGXCONFIGURE\"">NGX_AUTO_CONFIG_H

判断DEBUG标志,如果有的话,向/nginx/objs/ngx_auto_config.h写入DEBUG宏

if [ $NGX_DEBUG = YES ]; then
have=NGX_DEBUG . auto/have
fi

检查操作系统的参数是否支持后续编译

if test -z “$NGX_PLATFORM”; then
echo “checking for OS”

NGX_SYSTEM=`uname -s 2>/dev/null`NGX_RELEASE=`uname -r 2>/dev/null`NGX_MACHINE=`uname -m 2>/dev/null`echo " + $NGX_SYSTEM $NGX_RELEASE $NGX_MACHINE"NGX_PLATFORM="$NGX_SYSTEM:$NGX_RELEASE:$NGX_MACHINE";case "$NGX_SYSTEM" in    MINGW32_*)        NGX_PLATFORM=win32    ;;esac

else
echo “building for NGXPLATFORMNGXSYSTEM=NGX_PLATFORM
fi

检查并设置编译器,如,gcc是否安装,是否支持编译nginx

. auto/cc/conf

对于非windows操作系统的定义了一些必要的头文件,并检查其是否存在。

if [ “$NGX_PLATFORM” != win32 ]; then
. auto/headers
fi

定义一些对于当前操作系统的相关方法并检查当前环境是否支持

. auto/os/conf

定义类unix操作系统中通用的头文件和系统调用等,并检查当前环境是否支持。

if [ “$NGX_PLATFORM” != win32 ]; then
. auto/unix
fi

. auto/threads

最核心的构造运行期间modules的脚本,会生成ngx_modules.c文件,定义了Ngx_modules数组,这个数组用于指明nginx运行期间会有哪些模块参与到nginx的请求处理中。

. auto/modules

conf脚本用于检查nginx在连接器件需要连接的第三方静态库、动态库或是目标文件是否存在。

. auto/lib/conf

处理nginx安装后的路径

case “.NGXPREFIXin.)NGXPREFIX={NGX_PREFIX:-/usr/local/nginx}
have=NGX_PREFIX value=”\”$NGX_PREFIX/\”” . auto/define
;;

.!)    NGX_PREFIX=;;*)    have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define;;

esac

处理nginx安装后conf文件的路径

if [ “.NGXCONFPREFIX!=.];thenhave=NGXCONFPREFIXvalue=\”NGX_CONF_PREFIX/\”” . auto/define
fi

处理nginx安装后,二进制文件、pid、lock等其他文件的路径可参见configure参数中路径类选项的说明。

have=NGX_SBIN_PATH value=”\”NGXSBINPATH\”.auto/definehave=NGXCONFPATHvalue=\”NGX_CONF_PATH\”” . auto/define
have=NGX_PID_PATH value=”\”NGXPIDPATH\”.auto/definehave=NGXLOCKPATHvalue=\”NGX_LOCK_PATH\”” . auto/define
have=NGX_ERROR_LOG_PATH value=”\”$NGX_ERROR_LOG_PATH\”” . auto/define

have=NGX_HTTP_LOG_PATH value=”\”NGXHTTPLOGPATH\”.auto/definehave=NGXHTTPCLIENTTEMPPATHvalue=\”NGX_HTTP_CLIENT_TEMP_PATH\””
. auto/define
have=NGX_HTTP_PROXY_TEMP_PATH value=”\”NGXHTTPPROXYTEMPPATH\”.auto/definehave=NGXHTTPFASTCGITEMPPATHvalue=\”NGX_HTTP_FASTCGI_TEMP_PATH\””
. auto/define
have=NGX_HTTP_UWSGI_TEMP_PATH value=”\”NGXHTTPUWSGITEMPPATH\”.auto/definehave=NGXHTTPSCGITEMPPATHvalue=\”NGX_HTTP_SCGI_TEMP_PATH\””
. auto/define

创建编译时使用的objs、Makefile文件

. auto/make

为objs、Makefile加入需要连接的静态库和第三方库等

. auto/lib/make

为objs/Makefile加入install功能,用于执行make install时将编译生成的必要文件复制到安装路径。

. auto/install

在ngx_auto_config.h文件中加入NGX_SUPPRESS_WARN宏、NGX_SMP宏

STUB

. auto/stubs

在ngx_auto_config.h文件中加入NGX_USER、NGX_GROUP宏

have=NGX_USER value=”\”NGXUSER\”.auto/definehave=NGXGROUPvalue=\”NGX_GROUP\”” . auto/define

if [ “.NGXBUILD!=.];thenhave=NGXBUILDvalue=\”NGX_BUILD\”” . auto/define
fi

显示configure执行结果,若失败给出原因。

. auto/summary

./auto目录安放的都是nginx在安装时所需要的检测脚本

2.configure生成的文件
configure执行成功之后会生成一个objs目录,在该目录下会生成如下文件:
这里写图片描述
* src目录存放编译时产生的目标文件
* ngx_modules.c是一个很重要的文件,是用来定义ngx_modules数组的。这个数组用于指明每个模块在nginx中的优先级,越靠前优先级越高,当一个请求同时符合多个模块的处理规则的时候,就按照ngx_modules数组的顺序来选择最靠前的一个。所以说,ngx_modules数组的先后顺序很重要,不正确的顺序会导致nginx错误。
* autoconf.err保存的是configure的执行结果。
* Makefile文件用于编译nginx工程以及在加入install参数后安装nginx

总结起来就是说nginx在安装的时候做了许多幕后工作,包括检测操作系统环境,优化操作系统环境以及安装各种依赖文件等,所以说nginx的高效性在这里也得到了体现。

0 0