安装Nginx服务
安装过程在下面的文章当中,里面详细的介绍了Nginx服务的安装过程。
Nginx编译安装详细过程
Nginx服务的启停控制
Nginx启停控制的办法中一共有两种方法可以用来对Nginx服务的进行启停操作。
1.信号控制(非nginx内置命令中的信号控制)
nginx是由一个主进程(master process)
和多个工作进程(worker process)
组成。
所谓信号控制就是给进程发送特定的信号,进程收到信号后做出相应的操作。
那么,如何给主进程发送信号呢?这就需要知道主进程的进程号是多少了。
获取进程号:
cat /usr/local/nginx/logs/nginx.pid #nginx服务启动后自动产生的pid文件,内容只有进程号
ps -ef | grep nginx #使用ps方法查看nginx进程号,红线内第二列就是进程号
Nginx服务可接收的信号
信号 | 作用 |
TERM或INT | 快速停止Nginx服务,快速停止是指立即停止当前Nginx服务正在处理的所有网络请求,马上丢弃连接,停止工作。 |
QUIT | 平缓停止Nginx服务,平缓停止是指允许Nginx服务将当前正在处理的网络请求处理完成,但不接受新的请求,之后关闭连接,停止工作。 |
HUP | 使用新的配置文件启动进程,之后平缓停止原有进程,也就是所谓的 “ 平滑重启 ” |
USR1 | 重新打开日志文件,常用于日志切割 |
USR2 | 使用新版本的Nginx文件启动服务,之后平缓停止原有Nginx进程,也就是所谓的 “ 平滑升级 ” |
WINCH | 平滑关闭工作进程(work process) |
启动Nginx服务
/usr/local/nginx/sbin/nginx #绝对路径启用nginx,第一篇里面有软链接启用nginx服务
停止Nginx服务
kill -TERM | -INT | -QUIT `cat /usr/local/nginx/logs/nginx.pid` #选择三个中的一个即可,看需求而定
重启Nginx服务
kill -TERM | -INT | -QUIT `cat /usr/local/nginx/logs/nginx.pid` #先关闭
/usr/local/nginx/sbin/nginx #在开启
重载Nginx服务
kill -HUP `cat /usr/local/nginx/logs/nginx.pid` #平滑重启
2.Nginx内置命令
内置命令是nginx安装目录下的sbin目录中的nginx二进制文件自带的,比如mysql的mysql -u root -p***
一样,-u和-p就是内置命令用法,Nginx一样也拥有这些,只是命令的用法各不相同。
Nginx内置命令的相关用法
参数 | 作用 |
-?,-h | 显示帮助信息 |
-v | 打印版本号并退出 |
-V | 打印版本号和配置并退出 |
-t | 测试配置正确性并退出 |
-q | 测试配置时只显示错误 |
-s signal | 向主进程发送信号,只支持:stop(快速停止)、quit(平缓停止)、reopen(重新打开日志文件)、reload(平滑重启) |
-p prefile | 设置前缀路径,默认为:/usr/local/nginx,这个默认就是你预选时指定–prefix的路径 |
-c filename | 指定Nginx配置文件路径,默认:conf/nginx.conf |
-g directives | 从配置文件中设置全局指令 |
启动Nginx服务
/usr/local/nginx/sbin/nginx #绝对路径启用nginx,安装篇里面有软链接启用nginx服务
停止Nginx服务
nginx -s stop | quit #自己按需求选择
重启Nginx服务
nginx -s stop | quit #先关闭
/usr/local/nginx/sbin/nginx #在开启
重载Nginx服务
nginx -s reload #平滑重启
Nginx服务的平滑升级
平滑升级的原理
旧版本Nginx服务收到USR2信号后,将自己的nginx.pid文件添加后缀.oldbin,变为nginx.pid.oldbin,然后执行新版本的Nginx服务,如果新版本Nginx服务启动成功后会有两个新旧版本的Nginx服务同时提供WEB服务,之后就可以向旧版本Nginx服务发送WINCH信号使其的工作进程平滑停止,再向旧版本服务发送QUIT信号使其主进程平滑停止,并删除nginx.pid.oldbin文件。在发送WINCH信号前可随时停止新版本Nginx服务。
查看配置选项
/usr/local/nginx/sbin/nginx -V #复制configure arguments:里面的内容,保持新版本和旧版本的配置选项都一致
备份重要文件
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_back #备份旧版本的nginx命令
cp -r /usr/local/nginx/conf/ /usr/local/nginx/conf_back/ #备份旧版本的nginx配置文件
#还有其他的文件可以进行备份,看你们自己,比如/usr/local/nginx/logs目录里面的日志文件。
安装新版本Nginx
wget http://nginx.org/download/nginx-1.6.0.tar.gz #下载新版本nginx文件
tar -zxvf nginx-1.6.0.tar.gz -C /usr/src #解压nginx文件
cd /usr/src/nginx-1.6.0.tar.gz #切换到nginx-1.6.0.tar.gz目录
./configure --prefix=/usr/local/nginx #这个就是第一步复制的配置选项
make #切记这步不需要make install了否则会将原来的配置文件覆盖掉
新版本替换旧版本
cp objs/nginx /usr/local/nginx/sbin/ #新版本替换旧版本,把新版本nginx文件复制到/usr/local/nginx/sbin/目录下
/usr/local/nginx/sbin/nginx -t #测试是否替换成功
/usr/local/nginx/sbin/nginx -V #测试是否替换成功
平滑切换
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin` #此时还可以回滚到旧版本中去,请看下面的回滚操作
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
回滚操作
注意:回滚操作必须在对旧版本发送QUIT信号之前。
kill -HUP `cat /usr/local/nginx/logs/nginx.pid.oldbin` #此时会重新启动工作进程
kill -QUIT 新版本进程号 #然后再将新版本杀死(QUIT、INT、TERM都可以)
#此时就又返回到了原来状态,如果还想升级的话就继续对旧版本发送USR2信号,还是按照上面的操作来。