NGINX安装、启停、平滑升级
一、NGINX 安装
1、下载nginx
$ /opt/software
$ wget http://nginx.org/download/nginx-1.13.0.tar.gz
2、nginx解压安装
$ tar -zxvf nginx-1.13.0.tar.gz -C ./
3、预先安装
$ yum -y install gcc gcc-c++ ncurses-devel perl pcre pcre-devel zlib gzip zlib-devel
4、nginx编译
$ cd nginx-1.13.0
$ ./configure --prefix=/usr/local/nginx
5、安装nginx
$ make & make install
6、查看安装路径
$ cd /usr/local/nginx
$ ll
# conf 存放配置文件
# html 网页文件
# logs 存放日志
# sbin shell启动、停止等脚本
7、启动nginx
$ cd sbin
$ ./nginx
二、NGINX 命令
1、nginx启动
# 指令:nginx程序 -C nginx配置文件
$ /usr/local/nginx/sbin/nginx -C /usr/local/nginx/conf/nginx.conf
2、nginx启动
# 进入nginx可执行程序的目录
$ cd /usr/local/nginx/sbin
$ ./nginx -s reload
# 重启是建立在nginx服务需要启动
3、nginx停止
# stop 是快速关闭,不管有没有正在处理的请求。
$ ./nginx -s stop
# quit 是一个优雅的关闭方式,nginx在退出前完成已经接受的连接请求
$ ./nginx -s quit
4、 重新打开日志
$ ./nginx -s reopen
5、nginx检查配置文件
第一种
# 进入nginx可执行程序的目录
$ cd /usr/local/nginx/sbin
$ ./nginx -t
第二种
$ /usr/local/nginx/sbin/nginx -t -c /usr/local/nginxconf/nginx.conf
三、NGINX 的信号控制
nginx支持2种进程模型single和master-worker
single是单进程,一般不适用
master-worker是主进程和工作进程模型运行,主进程对工作进程管理。
nginx允许我们通过信号来控制主进程,用信号的方式可以达到不影响现有的连接的目的,
信号类型
INT. TERM 快速关闭信号
QUIT 从容关闭信号
HUP 从容重启信号,一般用于修改配置文件后,重启
USR1 重读日志,一般用于日志的切割
USR2 平滑升级信号
WINCH 从容关闭旧进程
具体语法:
kill -信号选项 nginx的主进程
例:
$ kill -INT 26661
$ kill -HUP 4873
1、nginx停止
#获取进程号
$ ps -ef | grep nginx
第1种从容"优雅"停止
$ kill -QUIT master进程号
# nginx服务可以正常地处理完当前所有请求再停止服务
# 步骤:首先会关闭监听端口,停止接受新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。
第2种快速停止
$ kill -TERM master进程号
$ kill -INT master进程号
# 快速停止服务时,worker进程与master进程再收到信号后会立刻跳出循环,退出进程。
第3种强制停止
$ pkill -9 nginx
#系统强杀nginx进程
2、重启nginx
$ kill -HUP master进程号
四、NGINX 平滑升级
1、平滑升级
# 进入nginx可执行程序的目录
$ cd /usr/local/nginx/sbin/
# 查看nginxd的版本
$ ./nginx -V
下载高版本nginx
# 下载高版本nginx
$ wget http://nginx.org/download/nginx-1.13.1.tar.gz
#
$ ./configure
# 不能执行make install
$ make
#此目录下有高版本的nginx
$ cd objs
# 备份低版本的nginx
$ cp -rfp objs/nginx /usr/local/nginx/sbin
# 测试一下新复制过来的文件生效情况
$ /usr/local/nginx/sbin/nginx -t
$ ps -ef | grep nginx
执行信号平滑升级
$ kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` 更新配置文件
# 给nginx发送USR2信号后,nginx会将logs/nginx.pid文件重命名为nginx.pid.oldbin,然后用新的可执行文件启动一个新的nginx主进程和对应的工作进程,并新建一个新的ngxin.pid保存新的主进程号
$ ps -ef | grep nginx
$ ll logs/
从容关闭旧进程
# 旧的主进程号收到WINCH信号后,将旧进程号管理的旧的工作进程优雅的关闭。即一段时间后旧的工作进程全部关闭,只有新的工作进程在处理请求连接。这时,依然可以恢复到旧的进程服务,因为旧的进程的监听socket还未停止。处理完成后,工作进程会自动关闭。
$ kill -WINCH 旧的主进程号
优雅关闭
#给旧的主进程发送QUIT信号后,旧的主进程退出,并一处logs/nginx.pid.oldbin文件,nginx的升级完成。
$ kill -QUIT 'cat /usr/local/nginx/logs/nginx.pid.oldbin'
2、中途停止升级,回滚到旧的nginx
在1中的步骤3时,如果想回到旧的nginx不再升级
给旧的主进程号发送HUP命令
此时nginx不重复读取配置文件的情况下重新启动旧的主进程的工作进程。
$ kill