一 平滑升级

当需要对正在运行的Nginx进行升级时,可以在不停止Nginx的情况下,使用新版本或者重编译的可执行程序替换旧版本的可执行程序,这里我们从nginx-1.10.1升级到nginx-1.11.1。

1.1  备份旧版本

因为Nginx的升级,实质只是用新版本的可执行文件,替换旧版本的可执行程序,所以,对于备份,既可以只备份旧版本可执行文件,也可以打包备份整个旧版本安装目录,参考命令分别如下:

只备份旧版本可执行文件

sudo cp /opt/app/nginx/sbin/nginx /opt/backup/nginx.bak

打包备份整个旧版本安装目录

zip -r nginx-all.zip /opt/app/nginx

1.2download新版本并解压Nginx压缩包

1.3 使用旧版本配置参数,构建新版本Nginx

因为只是对Nginx进行升级,并不涉及配置参数的修改,所以,我们一般使用和旧版本相同的配置(当然你也可以使用全新的配置信息),来编译新版本的Nginx,使用如下命令查看旧版本配置信息:

/opt/app/nginx/sbin/nginx -V

可以得到构建参数,比如:

configure arguments: --prefix=/opt/app/nginx--pid-path=/opt/app/nginx/nginx.pid--error-log-path=/opt/app/nginx/logs/error.log--http-log-path=/opt/app/nginx/logs/access.log --with-http_ssl_module--add-module=/opt/tools/echo-nginx-module

到新的源码包下

./configure --prefix=--prefix=/opt/app/nginx--pid-path=/opt/app/nginx/nginx.pid--error-log-path=/opt/app/nginx/logs/error.log--http-log-path=/opt/app/nginx/logs/access.log --with-http_ssl_module--add-module=/opt/tools/echo-nginx-module

1.4 编译新版本的

make

1.5 用新版本Nginx可执行程序覆盖旧版本可执行程序

cp objs/nginx /opt/app/nginx/sbin/nginx

如果有错误Text file busy之类的,强制覆盖

cp -cfp objs/nginx /opt/app/nginx/sbin/nginx

1.6 启动新版本Nginx主进程

发送 USR2信号给旧版本主进程号:

kill -USR2 旧版本的Nginx主进程号

旧版本Nginx主进程接收到-USR2信号,将重命名它的.pid文件为.oldpid,然后执行新版本的Nginx可执行程序,依次启动新版本的主进程和工作进程:

1.7 关闭旧版本的工作进程

此时,新、旧版本的Nginx实例会同时运行,共同处理请求,如果此时给旧版本主进程发送WINCH 信号,旧版本主进程将会给它的工作进程发送消息,请求它们从容关闭,此后,旧版本的工作进程开始逐步退出:

kill -WINCH 旧版本的Nginx主进程号

1.8 如果确认升级成功,给就主进程发送QUIT

应该注意的是,此时,旧版本的主进程还尚未关闭它监听的套接字,如果有需要,你仍可以恢复旧版本工作进程。如果由于某些原因,新版本的可执行文件运行情况不理想,下面有几种方案可供参考:

给旧版本主进程发送 HUP 信号。旧版本主进程将在不重新读取配置信息的情况下,重新开启工作进程。然后,通过给新版本主进程发送 QUIT 信号,所有新版本的进程将会从容关闭。

给新版本主进程发送 TERM 信号。然后,他将会给它的工作进程发送消息,要求它们立即退出,紧接着,这些工作进程就会立即退出。(如果因为某些原因,新版本进程没有退出,应该给新版本主进程发送 KILL 信号,强制新版本主进程退出。)新版本主进程退出的同时,旧版本主进程将会自动启动它的工作进程。

新版本主进程退出后,旧版本主进程将会移除名字以.oldpid 结尾的文件,恢复为它的 .pid 文件。

如果升级成功,应该给旧版本主进程发送 QUIT 信号,使其退出,只保留新版本进程:

kill -QUIT 旧的主进程

二 添加新模块

刚接触Nginx时,只知道Nginx的功能是分模块的,并不清楚有些模块默认是不参与到构建中去的,比如ngx_http_ssl_module,邮件相关的模块,默认情况下是没有构建到Nginx中的。

随着业务不断扩展,如果需要Nginx支持某些模块,而这些模块默认不在Nginx的构建计划中,构建Nginx时,又没有指定加入这些模块,该怎么办呢?是否能够给已经运行的Nginx动态添加这些模块呢?答案是肯定的!

给运行中的Nginx动态添加模块的方案,与上面提到的平滑升级Nginx的方案很类似。下面我们来看一下如何给运行中的Nginx添加 这些 模块。

2.1 如果是第三方模块,则下载第三方模块

比如新加echo模块

wget --no-check-certificatehttps://github.com/openresty/echo-nginx-module/releases/tag/v0.61/openresty/echo-nginx-module/archive/v0.61.tar.gz

2.2 停止Nginx(也可以不),然后对整个文件目录备份

/bin/kill -s TERM pid

zip -r /opt/backup/nginx-1.10.3.zip /opt/app/nginx

2.3 进入到Nginx源码包下,进行配置和编译

/opt/tools/nginx-1.10.3

./configure --prefix=/opt/app/nginx \

--pid-path=/opt/app/nginx/nginx.pid \

--error-log-path=/opt/app/nginx/logs/error.log \

--http-log-path=/opt/app/nginx/logs/access.log \

--with-http_ssl_module \

--with-mail \

--add-module=/opt/tools/echo-nginx-module \

make

注意不能make install,否则就覆盖了nginx之前的一些东西

2.4用构建的Nginx可执行程序覆盖旧版本可执行程序

进入Nginx源码包下objs目录,把nginx文件替换掉之前的

直接把编译目录下objs/nginx文件直接覆盖老的nginx文件.如果你需要安装多个nginx第三方模块,你只需要多指定几个相应的--add-module即可.

cd /opt/tools/nginx-1.10.3/objs

cp nginx /opt/app/nginx/sbin/

2.5 修改新的复制过来的nginx 的属组和权限

sudo chown -R root /opt/app/nginx/sbin/nginx

sudo chmod u+s /opt/app/nginx/sbin/nginx

2.6 重启Nginx 如果不重启也可以,参考平滑升级

/opt/app/nginx/sbin/nginx

2.7 查看构建信息

nginx –V

configure arguments: --prefix=/opt/app/nginx--pid-path=/opt/app/nginx/nginx.pid--error-log-path=/opt/app/nginx/logs/error.log--http-log-path=/opt/app/nginx/logs/access.log --with-http_ssl_module--with-mail --add-module=/opt/tools/echo-nginx-module

Nginx之升级和构建后添加新的模块相关推荐

  1. Nginx使用-已安装的ngix上添加新的模块sub_filter

    目录 一.sub_filter模块介绍 二.安装说明 三.安装和配置 一.sub_filter模块介绍 sub_filter模块为nginx官方自带的模块,功能为替换掉返回给客户端数据的指定内容.需要 ...

  2. 在 phpMyAdmin 里添加新用户帐号

    为了数据库的安全性,尽量不用 root 来连接网站的数据库,以前用 cPanel 面板时,这个不是问题,添加帐号很简单,现在 VPS 不提供任何面板,只能用phpmyadmin 来创建新用户帐号了,这 ...

  3. excel数据生成txt逗号分隔文本及末尾添加新列

    先写一下用excel格式数据生成txt逗号分隔文本的方法: 原始的数据是excel格式n行7列的数据,选择"文件---另存为---.csv逗号分隔文件---保存",用记事本打开保存 ...

  4. IntelliJ IDEA for Mac 如何在当前的普通Java项目中创建新的模块/添加模块/创建模块

    文章目录 添加模块的入口 创建新的项目模块 添加模块的入口 添加新的模块的入口有两个,如下图所示: 第一种方式,[File] --> [New] --> [Module]: 第二种方式,打 ...

  5. Vue项目构建后通过Nginx/SpringBoot/Express/Egg发布

    Vue项目构建后通过Nginx/SpringBoot/Express/Egg发布 构建 当项目开发完毕,只需要运行一行命令就可以打包你的应用: $ yarn build or $ npm run bu ...

  6. 在Blazor中构建数据库应用程序——第6部分——向天气应用程序添加新记录类型及其UI

    目录 介绍 示例项目和代码 过程概述 数据库 CEC天气库 为记录添加模型类 添加一些实用程序类 更新WeatherForecastDbContext 添加数据和控制器服务 表单 WeatherSta ...

  7. 聚焦后电梯新蓝海市场,日立电梯升级服务解决方案

    9月10日,日立电梯(中国)有限公司(以下简称"日立电梯")在广州举办"价值立新 智创未来"创新分享汇.聚焦后电梯新蓝海市场,日立电梯从维保.更新.改造.加装等 ...

  8. win10系统添加新字体后网页某些字体乱码或字体极小

    win10系统添加新字体后网页某些字体乱码或字体极小 当win10系统添加新字体后,网页中有可能代码框会显示有问题,比如打开菜鸟教程时显示: 在代码框内的字体变得非常小,其他地方字体正常.此时可以按F ...

  9. android学习笔记---1.为应用添加新的Activity,中使用Intent(意图),结果码,请求码,得到新打开Activity 关闭后返回的数据,Bundle类的作用

    1.为应用添加新的Activity 第一步:新建一个继承Activity的类,如:NewActivity public class NewActivity extends Activity {     ...

最新文章

  1. UIView 弹出动画
  2. 计算机考研编程题占,纪念***去的2018计算机考研编程题
  3. oracle error-1555,从另外一个角度看ORA-1555
  4. Mysql:Sql的执行顺序
  5. 2015生命之旅---第一站重庆
  6. ansible(自动化运维下)——yaml语言,Role-角色扮演
  7. [手把手教]discuzX2插件制作教程__最菜鸟级别的入门坎 【三】
  8. c语言中不带任何修饰符的浮点变量,江苏省计算机等级考试二级C语言笔试辅导题目...
  9. div输入的内容全选css,将CSS类应用于内容中的选定文本可编辑div
  10. 最强android平板,最强安卓平板!华为MatePad Pro来了:搭载麒麟990
  11. 关于vector的两个问题(reserve方法修整过剩空间)
  12. HTML5 Canvas 车架号第十位是L,汽车生产日期字母对照
  13. Android6.0 Qualcomm Atheros QCA6174A WiFi Model Support
  14. 对于百度统计热力点击图的研究
  15. 对一批编号为1~100,全部开关朝上(开)的灯进行以下操作:凡是1的倍数反方向拨一次开关;2的倍数反方向又拨一次开关;3的倍数反方向又拨一次开关……问:最后为关熄状态的灯的编号。
  16. centos7里xxx.jar解压和压缩
  17. 程序员找工作黑名单,避雷针!
  18. shell遍历多个数组
  19. 网络及其服务配置------网络配置
  20. 互联网快讯:极米NEW Z6成年轻人投影首选;高德地图在北京上线无障碍公交

热门文章

  1. nginx 多php项目配置文件,nginx 配置文件配置多个站点
  2. 简述java对象的封装特点_简述Java面向对象三大特征:封装、继承、多态
  3. 船员英语老师是面试还是计算机答题,面试时的英语介绍
  4. 清远机器人编程_「新时代好少年」清远学生研发“灭火装置”获实用新型专利...
  5. 计算机技术应用于教学案例,中职计算机教学中案例教学方法的运用
  6. python如何下载pandas、时间延长_大pandas,python – 如何在时间表中选择具体时间
  7. 计算机考研需要看数据库吗,05报考华中科技计算机系数据库所的我复试经历
  8. 开始位置 环状图_上海这个地方新建两所中小学!建筑效果图、出入口、学校位置等信息公布...
  9. 计算机网络与传统的通信网络的最大区别,3G,4G技术3G与传统通信技术的主要区别?主要特色?另对4G稍 爱问知识人...
  10. css 右上角 翻开动画_css制作电闪雷鸣的天气图标