Nignx安装、configure、Nignx命令行控制

最为简单的按照,就是全部使用默认选项

./configure
make 
make install

1、configure

configure脚本检测操作系统内核和已经安装的软件, 参数的解析(option), 中间目录的生成(init)以及根据各种参数生成一些C源码文件、 Makefile文件等。
make命令根据configure命令生成的Makefile文件编译Nginx工程, 并生成目标文件、 最终的二进制文件。
make install命令根据configure执行时的参数将Nginx部署到指定的安装目录, 包括相关目录的建立和二进制文件、 配置文件的复制。

#!/bin/sh

#这是一个shell脚本执行程序

#Copyright (C) Igor Sysoev
#Copyright (C) Nginx, Inc.


LC_ALL=C
export LC_ALL


#依次调用auto目录下面的option、init、sources脚本来处理,利用对应的变量名标志。

#处理用户输入
. auto/options

#初始化相关的shell变量,例如生成makefile的路径,特性测试c文件的路径。
. auto/init

#生成Makefile里面的依赖项
. auto/sources


#目录不存在则生成目录obj。
test -d $NGX_OBJS || mkdir $NGX_OBJS

echo > $NGX_AUTO_HEADERS_H
echo > $NGX_AUTOCONF_ERR

#将用户定义的配置选项存起来。
#在NGX_CONFIGURE="$opt" 
echo "#define NGX_CONFIGURE \"$NGX_CONFIGURE\"" > $NGX_AUTO_CONFIG_H


#NGX_DEBUG是在auto/options文件中处理的,如果有--with-debug选项,则其值是YES
if [ $NGX_DEBUG = YES ]; then

#当有debug选项时,将NGX_DEBUG宏写入ngx_auto_config.h
    have=NGX_DEBUG . auto/have
fi

#在opition中没有赋值平台属性,则默认是Linux,通过uname获取属性
#本机上面NGX_PLATFORM = "Linux 4.4.0-119-generic x86_64"
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 $NGX_PLATFORM"
    NGX_SYSTEM=$NGX_PLATFORM
fi



######configure会依次调用其它几个文件,来进行环境的检测,包括编译器、操作系统相关。
# 编译器选项
. auto/cc/conf

#将支持的头文件通过宏定义声明
if [ "$NGX_PLATFORM" != win32 ]; then
    . auto/headers
fi

# 操作系统相关的配置的检测
. auto/os/conf

if [ "$NGX_PLATFORM" != win32 ]; then
# unix体系下的通用配置检测
    . auto/unix
fi

. auto/modules
. auto/lib/conf

case ".$NGX_PREFIX" in
    .)
        NGX_PREFIX=${NGX_PREFIX:-/usr/local/nginx}
        have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define
    ;;

    .!)
        NGX_PREFIX=
    ;;

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

if [ ".$NGX_CONF_PREFIX" != "." ]; then
    have=NGX_CONF_PREFIX value="\"$NGX_CONF_PREFIX/\"" . auto/define
fi

have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define
have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define
have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define
have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define
have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define

have=NGX_HTTP_LOG_PATH value="\"$NGX_HTTP_LOG_PATH\"" . auto/define
have=NGX_HTTP_CLIENT_TEMP_PATH value="\"$NGX_HTTP_CLIENT_TEMP_PATH\""
. auto/define
have=NGX_HTTP_PROXY_TEMP_PATH value="\"$NGX_HTTP_PROXY_TEMP_PATH\""
. auto/define
have=NGX_HTTP_FASTCGI_TEMP_PATH value="\"$NGX_HTTP_FASTCGI_TEMP_PATH\""
. auto/define
have=NGX_HTTP_UWSGI_TEMP_PATH value="\"$NGX_HTTP_UWSGI_TEMP_PATH\""
. auto/define
have=NGX_HTTP_SCGI_TEMP_PATH value="\"$NGX_HTTP_SCGI_TEMP_PATH\""
. auto/define

# 生成objs/makefile文件
. auto/make

# 生成关于库的编译选项到makefile文件
. auto/lib/make

# 生成与安装相关的makefile文件内容,并生成最外层的makefile文件
. auto/install

# STUB
. auto/stubs

have=NGX_USER value="\"$NGX_USER\"" . auto/define
have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/define

# 编译的最后阶段,汇总信息
. auto/summary

2、configure参数解释

详情请参考深入理解Nignx模块开发与结构解析。

3、运行configure过后生成的文件

这里写图片描述

  • src目录用于存放编译时产生的目标文件。
  • Makefile文件用于编译Nginx工程以及在加入install参数后安装Nginx。
  • autoconf.err保存configure执行过程中产生的结果,系统特性检测结果都保存在这里。
  • ngx_auto_headers.hngx_auto_config.h保存了一些宏, 这两个头文件会被src/core/ngx_config.hsrc/core/ngx_headers.h使用。
  • ngx_modules.c是一个关键文件, 我们需要看看它的内部结构。后续继续分析。

4、Nignx命令行控制

在Linux中, 需要使用命令行来控制Nginx服务器的启动与停止、 重载配置文件、 回滚日志文件、 平滑升级等行为。 默认情况下, Nginx被安装在目录usr/local/nginx/中, 其二进制文件路径为usr/local/nginc/sbin/nginx, 配置文件路径为usr/local/nginx/conf/nginx.conf。 当然, 在configure执行时是可以指定把它们安装在不同目录的。 为了简单起见, 只说明默认安装情况下的命令行的使用情况, 如果安装的目录发生了变化, 那么替换一下即可。

1、默认启动及配置参数

输入脚本执行/usr/local/nginx/sbin/nginx
程序会读取默认路径下的配置文件/usr/local/nginx/sbin/nginx.conf。在configure脚本指向期间,可以通过--conf-path=*参数,指定nginx.conf的路径。另外也可以通过/usr/local/nginx/sbin/nginx -c temp_nginx.conf指定配置文件。-c参数用于指定配置参数。

2、不启动Nignx测试配置参数

/usr/local/nginx/sbin/nginx -t可以测试配置文件是否有问题。

3、Nignx版本信息

`/usr/local/nginx/sbin/nginx -v

4、快速地停止服务

使用-s stop可以强制停止Nginx服务。 -s参数其实是告诉Nginx程序向正在运行的Nginx服务发送信号量, Nginx程序通过nginx.pid文件中得到master进程的进程ID, 再向运行中的master进程发送TERM信号来快速地关闭Nginx服务。
/usr/local/nginx/sbin/nginx -s stop
实际上, 如果通过kill命令直接向nginx master进程发送TERM或者INT信号,效果是一样的。

4、从容地退出服务

如果希望Nginx服务可以正常地处理完当前所有请求再停止服务, 那么可以使用-s quit参数来停止服务。当选择快速停止服务时, worker进程与master进程在收到信号后会立刻跳出循环,退出进程。而从容地退出服务时,首先会关闭监听端口,
停止接收新的连接, 然后把当前正在处理的连接全部处理完,最后再退出进程。直接发送QUIT信号给master进程来停止服务, 其效果与执行-s quit命令是一样的。
/usr/local/nginx/sbin/nginx -s quit

5、运行中的Nginx重读配置项并生效

Nginx会先检查新的配置项是否有误,如果全部正确就以“优雅”的方式关闭,再重新启动Nginx来实现这个目的。类似的, -s是发送信号, 仍然可以用kill命令发送HUP信号来达到相同的效果。
/usr/local/nginx/sbin/nginx -s reload

6、日志回滚

使用-s reopen参数可以重新打开日志文件, 这样可以先把当前日志文件改名或转移到其他目录中进行备份, 再重新打开时就会生成新的日志文件。 这个功能使得日志文件不至于过大。使用kill命令发送USR1信号也可以实现相同效果。
/usr/local/nginx/sbin/nginx -s reopen

7、平滑升级Nignx

当Nginx服务升级到新的版本时,必须要将旧的二进制文件Nginx替换掉,通常情况下这是需要重启服务的,但Nginx支持不重启服务来完成新版本的平滑升级。
1)通知正在运行的旧版本Nginx准备升级。通过向master进程发送USR2信号可达到目的。这时,运行中的Nginx会将pid文件重命名, 如将/usr/local/nginx/logs/nginx.pid重命名为/usr/local/nginx/logs/nginx.pid.oldbin,这样新的Nginx才有可能启动成功。
2)启动新版本的Nginx, 可以使用以上介绍过的任意一种启动方法。 这时通过ps命令可以发现新旧版本的Ngin
x在同时运行。
3)通过kill命令向旧版本的master进程发送SIGQUIT信号,以“优雅”的方式关闭旧版本的Nginx。随后将只有新版本的Nginx服务运行,此时平滑升级完毕。

8、显示帮助

使用-h或-?参数显示Nginx支持的所有命令行参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有时需要偏执狂

请我喝咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值