重新编译nginx

作者:杨润炜
日期:2016/2/26 11:55

准备工作

找到之前nginx的安装包

如果之前有备份,则用这个备份的包。如果没有,则需要知道自己nginx的版本,然后到官网下载此版本的安装包。

更新openssl

为了防止出现以下错误,最好更新openssl,如图所示
openssl_error

以ubuntu为例

  1. sudo apt-get update
备份目前的nginx

为了安全起见,最好做个备份。
假如nginx放在/opt目录下,则执行以下命令

  1. sudo cp /opt/nginx/sbin/nginx /opt/nginx/sbin/nginx.bak

重新编译nginx

假如我们安装包放在家目录下的Soft目录里,版本是1.9.6,则依次执行以下命令

  1. cd ~/Soft
  2. tar xvzf nginx-1.9.6.tar.gz
  3. cd nginx-1.9.6
  4. ./configure --prefix=/opt/nginx --with-http_ssl_module
  5. make

注:这里需要注意的是,不能用make install代替,因为make install是覆盖安装。

平滑升级

此时当前目录下的objs里就有一个新的nginx文档,把这个新nginx覆盖掉目前的nginx就可以了。但是现在的nginx正在运行,怎样才能保证平滑升级呢?

覆盖旧的nginx
  1. sudo cp -rfp objs/nginx /opt/nginx/sbin/nginx
测试新版本nginx是否正常
  1. cd /opt/nginx/sbin
  2. sudo ./nginx -t
平滑升级nginx
1.启动新nginx版本,新旧共存
  1. sudo kill -USR2 `cat /opt/nginx/logs/nginx.pid`

注:旧版本Nginx的pid变为oldbin,这是旧版本和新版本的nginx同时运行,过一段时间等就nginx处理完用户请求后,执行下面操作

2.平缓停止worker process
  1. kill -s WINCH `cat /opt/nginx/logs/nginx.pid.oldbin`
3.关闭旧版nginx
  1. kill -s QUIT `cat /opt/nginx/logs/nginx.pid.oldbin`
验证nginx是否升级成功
  1. /opt/nginx/sbin/nginx -V

出现如下图结果则表示重新编译成功
nginw-v

若新版nginx有异常,需要回滚到旧版

在旧版进程还在的时候,执行如下命令

1、不加载配置启用旧版进程,重新接收请求
  1. kill -s HUP `cat /opt/nginx/logs/nginx.oldbin`
2、关闭新版nginx进程
  1. kill -s QUIT `cat /opt/nginx/logs/nginx.pid`

注意

如果升级后出现改变nginx配置文件不生效的话,可以尝试停止nginx再启动。请看停止及启动nginx方法

感谢您的阅读!
如果看完后有任何疑问,欢迎拍砖。
欢迎转载,转载请注明出处:http://www.yangrunwei.com/a/34.html
邮箱:glowrypauky@gmail.com
QQ: 892413924