由于Nginx的一些模块需要依赖其他第三方库,通常有pcre库(支持rewrite模块)、zlib库(支持gzip模块)和openssl(支持ssl模块)等。

yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel open

Linux版本的编译和安装:Nginx软件的自动脚本

为了方便,在文件系统的根目录下新建Nginx_123目录,最后会把编译好的Nginx安装到此目录中。同时,在此目录中新建Nginx_123_Compile,用来编译Nginx软件:​​mkdir /Nginx_123/​​​。将nginx-1.2.3.tar.gz复制到对应目录中:​​cp nginx-1.2.3.tar.gz /Nginx_123​​​。解压Nginx源代码:​​tar xf nginx-1.2.3.tar.gz​​​。
auto目录下是各种脚本资源,有的检查环境(如os目录下的脚本),有的检查模块(如modules脚本),有的处理脚本参数(如options脚本),有的是用来输出信息到生成文件的(如have、nohave、make及install等),还有的是为自动脚本本身服务(如feature脚本)。
将当前工作路径定位到/Nginx_123/Nginx_123_Compile/nginx-1.2.3/目录之后,使用如下命令配置并生成Makefile文件:​​​./configure --prefix=/Nginx​​​。prefix指定安装路径为/Nginx目录。
编译​​​make​​​,安装​​make install​​。Nginx服务器的安装目录中主要包括了conf、html、logs和sbin等4个目录。conf目录中存放Nginx的所有配置文件。其中,nginx.conf文件是Nginx服务器的主配置文件,其他配置文件是用来配置Nginx的相关功能的。在此目录下,所有的配置文件都提供了以.default结尾的默认配置文件,方便将配置过的.conf文件恢复到初始状态。

启停和升级

Nginx服务的信号控制

Nginx服务在运行时,会保持一个主进程和一个或多个worker process工作进程。可以通过给Nginx服务的主进程发送信号就可以控制服务的启停了。获取主进程PID有两个途径:在Nginx服务启动以后,默认在Nginx服务器安装目录下的logs目录中会产生文件名为nginx.pid的文件,此文件中保持的是Nginx服务主进程的PID;使用ps命令​​ps -ef | grep nginx​​​,查找master process。
Nginx服务主进程能够接收的信号如下:

信号

作用

TERM或INT

快速停止Nginx服务

QUIT

平缓停止Nginx服务

HUP

使用新的配置文件启动进程,之后平缓停止原有进程,也就是所谓的“平滑重启”

USR1

重新打开日志文件,常用于日志切割,在相关章节中会对此一步说明

USR2

使用新版本的Nginx文件启动服务,之后平缓停止原有Nginx进程,也就是所谓的“平滑升级”

WINCH

平缓停止worker process,用于Nginx服务器平滑升级

向Nginx服务主进程发送信号有两种方法:一种是使用nginx二进制文件,另一种方法是使用kill命令发送信号。
kill SIGNAL PID:PID指定Nginx服务主进程的PID
kill SIGNAL `filepath`:filepath为nginx.pid的路径

Nginx服务的启动

启动Nginx服务器直接运行安装目录下sbin目录中的二进制文件即可:​​./sbin/Nginx​

Nginx服务的停止

快速停止:​​./sbin/Nginx -g TERM | INT​​​ 平缓停止:​​./sbin/Nginx -g QUIT​

Nginx服务的重启

平滑重启的过程:Nginx服务进程接收到信号后,首先读取新的Nginx配置文件,如果配置语法正确,则启动新的Nginx服务,然后平缓关闭旧的服务进程;如果新的Nginx配置有问题,将显示错误,仍然使用旧的Nginx进程提供服务。
​​​./sbin/nginx -g HUP [-C newConfFile]​​或kill HUP `/Nginx/logs/nginx.pid`

Nginx服务的升级

平滑升级的过程:Nginx服务接收到USR2信号后,首先将旧的nginx.pid文件(如果在配置文件中更改过这个文件的名字,也是相同的过程)添加后缀.oldbin,变为nginx.pid.oldbin文件,然后执行新版本Nginx服务器的二进制文件启动服务。如果新的服务启动成功,系统中将有新旧两个Nginx服务共同提供Web服务。之后,需要向旧的Nginx服务进程发送WINCH信号,使旧的Nginx服务平滑停止,并删除nginx.pid.oldbin文件。在发送WINCH信号之前,可以随时停止新的Nginx服务。
为了实现nginx服务器的平滑升级,新的服务器安装路径应该和旧的保持一致。因此建议用户在安装新服务之前先备份旧服务器。如果由于某种原因无法保持新旧服务器安装路径一致,则可以先使用如下命令将旧服务器的安装路径更改为新服务器的安装路径:

./Nginx/nginx -p newInstallPath # 之后备份旧服务器,安装新服务器即可
./sbin/Nginx -g USR2 或 kill USR2 \`/Nginx/logs/nginx.pid\` #发送平滑升级信号
#通过ps -ef|grep nginx查看新的Nginx服务启动正常,再使用
./sbin/Nginx -g WINCH 或 kill WINCH \`/Nginx/logs/nginx.pid\`#WINCH信号用于发送平滑停止旧服务信号