nginx平滑升级,不影响线上业务的运行

这里nginx的安装目录是:nginx

第一步:查看nginx版本号:

[root@localhost nginx-web]# nginx -v
nginx version: nginx/1.15.12

这里的版本号是1.10.3,对比下官网的版本号:

第二步:下载上传并解压nginx安装包

我这里下载的是1.21.4的版本号 nginx-1.21.4,下载下来后上传到服务器,

下载地址:nginx: download

解压命令

tar zxvf nginx-1.21.4.tar.gz

查看解压后的文件  ,

[root@localhost nginx_new]# ls -l
total 1048
drwxr-xr-x 9 vsftpd vsftpd     186 Dec 20 17:47 nginx-1.21.4
-rw-r--r-- 1 root   root   1070260 Dec 20 17:05 nginx-1.21.4.tar.gz[root@localhost nginx_new]# cd nginx-1.21.4/
[root@localhost nginx-1.21.4]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src

第三步:编译安装包

可以看到解压后的目录下有  configure

1、 ./configure 是配置相关参数

这里需要了解之前的安装配置

1、如果配置了nginx全局启动可以使用 nginx -V查看

2、如果没有设置全局启动,到nginx安装目录下 找到sbin文件夹,进入后 使用: ./nginx -V

-v  查看版本号

-V 查看安装细节

在"./configure"配置中,"--with"表示启用模块,也就是说这些模块在编译时不会自动构建"--without"表示禁用模块,也就是说这些模块在编译时会自动构建,若你想Nginx轻量级运行,可以去除一些不必要的模块。

这里可以看到的是 之前的安装配置比较复杂比较全,直接将  --prefix=一直到最后复制下来,然后使用./configure 执行

./configure --prefix=/usr/local/nginx-web --with-http_ssl_module --with-http_gzip_static_module

如果,配置错了需要重新配置编译,这里可以重复执行

 2、使用make命令进行编译 

这里是升级不要使用make install,只编译不安装

[root@localhost nginx-1.21.4]# make

看到这里说明编译成功,编译好的文件在 objs目录下

测试编译后的程序是否可行:

执行:objs/nginx -t -c /usr/local/nginx-web/conf/nginx.conf,结果如下图

第四步:替换原有的nginx启动程序

1、替换nginx的启动程序之前先做好备份

[root@localhost nginx-web]# mv /usr/local/nginx-web/sbin/nginx /usr/local/nginx-web/sbin/nginx.15.old

2、查看备份结果,备份成功,现在开始准备替换nginx

也可以把配置文件nginx.conf备份下

编译好的程序在objs目录下:

3、执行替换,使用cp复制到对应的目录下就好

这里替换命令报错,因为我们的nginx正处于启动状态

4、查看下 ps -ef | grep nginx,,这里看到进程是10441

第一种:直接kill 干掉进程,进行替换

第二种:发送USR2信号给旧版本主进程号,使nginx的旧版本停止接收请求,用nginx新版本接替,且老进程处理完所有请求,关闭所有连接后,停止后替换

执行命令 kill -USR2 `cat nginx.pid`

kill -USR2 `cat nginx.pid`

查看nginx pid目录,多了个nginx.pid.oldbin文件,存放了旧版本nginx的pid号

kill -WINCH `cat nginx.pid.oldbin`

从容关闭旧进程:kill -QUIT `cat nginx.pid.oldbin`

kill -QUIT `cat nginx.pid.oldbin`

[root@localhost logs]# kill -QUIT `cat nginx.pid.oldbin`
[root@localhost logs]# ls
access.log  error.log  nginx.pid

5、查看版本号 ./nginx -v

[root@localhost sbin]# ./nginx -v
nginx version: nginx/1.21.4

6、执行./nginx -s relaod

7、检查是否启动成功

[root@localhost logs]# ps -ef | grep nginx
nobody    3976 27438  0 11:18 ?        00:00:00 nginx: worker process
root      5224 12257  0 11:19 pts/1    00:00:00 grep --color=auto nginx
root     27438     1  0 10:36 ?        00:00:00 nginx: master process ./nginx
[root@localhost logs]# ll /proc/27438/exe
lrwxrwxrwx 1 root root 0 12月 21 10:41 /proc/27438/exe -> /usr/local/nginx-web/sbin/nginx.15.old
[root@localhost logs]#  /usr/local/nginx-web/sbin/nginx.15.old -v
nginx version: nginx/1.15.12

可以看到的是这里依然使用的是旧程序。

可以执行以下命令:


[root@localhost logs]# kill -USR2 `cat nginx.pid`
[root@localhost logs]# ls
access.log  error.log  nginx.pid  nginx.pid.oldbin
[root@localhost logs]# kill -WINCH `cat nginx.pid.oldbin`

查看结果:

kill -USR2 的作用: 新执行文件启动,生成新进程号,新旧的进程共存!

所以运行 kill -USER2之后,存在nginx.pid 和 nginx.pid.oldbin

kill -WINCH 的作用:新来的请求统统由新程序处理,老的连接还继续由老程序处理;上图的结果印证这一说法;

稍等一段时间后,感觉没有人使用旧程序了,这个时候,时机到了,彻底弃用旧程序;

这个时候再执行:kill -QUIT `cat nginx.pid.oldbin`  ,干掉旧的程序

kill -QUIT `cat nginx.pid.oldbin`

这个时候查看的结果如下,说明已经转到新程序了

说明:如何查找nginx的目录

方法一:

如果找不到nginx安装目录,可以使用 nginx -V寻找nginx的目录 ,前提是服务器中的nginx是全局命令,可以这样查找

方法二:

也可以使用:whereis nginx

方法三 使用 ps -ef | grep nginx  和 ll /proc/{PID}/exe

希望能帮助到你,记得点赞!!!谢谢!!!

如何对nginx进行平滑升级相关推荐

  1. nginx的平滑升级方法:

    最简单的nginx的平滑升级方法: 1 找到nginx的执行文件的路径 1 # ps auxf|grep nginx  记下nginx的master进程 pid(我这里是2752 ) 2 查看当前ng ...

  2. 源码安装nginx以及平滑升级

    源码安装nginx以及平滑升级 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:高级运维工程师之路 598432640 这个博客不方便上传软件包,我给大家把软件包放到百度云 ...

  3. nginx的平滑升级

    前言 关于nginx,我们通常都会提到nginx的平滑升级.即在不影响业务的情况下,对正在使用的nginx的版本进行升级.而这个操作是只在有必要升级时才进行的. 关于nginx的平滑升级与nginx添 ...

  4. nginx进行平滑升级

    文章目录 前言 一.准备工作 1.下载需要更新的nginx版本,解压 2.编译并make(不进行make install) 二.升级方法一 1.备份安装目录下的nginx 2.复制objs目录下的ng ...

  5. Nginx的平滑升级记录---适用于编译安装的Nginx

    一.查看自己的Nginx的版本号 [root@localhost sbin]# cd /usr/local/nginx/sbin/ [root@localhost sbin]# ls nginx [r ...

  6. nginx版本平滑升级(超详细)

    一.前期准备 二.开始实验 安装旧版本 安装新版本 三.可能遇到的问题 文章背景:护网期间,客户跟我说nginx有0day漏洞,需要版本升级,我寻思着我也不是运维啊,问我干嘛(你干嘛~ 哎呦~),我没 ...

  7. Nginx网站服务(安装nginx、平滑升级nginx、nginx各种访问配置)

    文章目录 一.Nginx概述 1.什么是nginx? 2.Nginx应用场景 3.Nginx应用企业 4.nginx的HTTPD七层代理和四层代理 二.Nginx和Apache的区别 三.编译安装Ng ...

  8. WP+Nginx+Ubuntu平滑升级PHP版本

    前言 无障碍升级/切换PHP版本,适用于Ubuntu环境 安装Ondřej Surý PPA 什么是Ondřej Surý PPA? Ondřej Surý PPA Ondřej Surý PPA ( ...

  9. Nginx 的启动、停止、平滑重启、信号控制和平滑升级

    Nginx 的启动          假设 nginx 安装在 /usr/local/nginx 目录中,那么启动 nginx 的命令就是: [root@localhost ~]# /usr/loca ...

最新文章

  1. sqlsourcesafe mysql_mysql权限问题,看不到其它的库!
  2. python app服务器_Python应用02 Python服务器进化
  3. 【简便代码】1064 朋友数 (20分)_25行代码AC
  4. 安装Android studio打不开,提示the environment variable HAVA_HOME does not point to a val
  5. 又双叒叕是一个动态简历
  6. jdk Arrays类
  7. 开发工具总结(8)之图文并茂全面总结上百个AS好用的插件(下)
  8. php微信支付 mweb,前端H5调用微信支付
  9. android 开发闪屏动画,Android闪屏效果实现方法
  10. Tivoli Storage Manager安装配置
  11. 计算机专业需要物理力学,读经典物理学和量子力学所想到的计算机哲学
  12. Minecraft 1.19.2 Forge模组开发 12.自定义鞘翅
  13. JAVA衣依服装销售平台计算机毕业设计Mybatis+系统+数据库+调试部署
  14. Bi-Direction attention flow for machine reading(原理篇)
  15. 迅搜 php,关于 Xunsearch PHP-SDK
  16. Python基于OpenCV的智能交通灯系统(南北车流量比例)[源码&部署教程]
  17. Automation Anywhere进阶培训-1-AA简介
  18. input仅输入数字且不会偷偷带小尾巴(input里没有,等取值时发现多了一个最后点击的英文字母☺️)
  19. 21天养成良好习惯-20
  20. PMP考试结果查询网站

热门文章

  1. FFMPEG使用显卡编码视频 转码
  2. 2021年中国鸡尾酒杯市场趋势报告、技术动态创新及2027年市场预测
  3. 微小宝公众号排行榜_微小说免费阅读网公众号大全推荐资源网
  4. 「 Gazebo仿真 」地图创建、多模型显示、基本指令
  5. python中pd series_pd.Series的基本操作
  6. android zip格式的ndk,Android 使用NDK (JNI)容易解压7z压缩文件
  7. 001.flink内存分配机制
  8. git版本管理工具用法介绍
  9. LaTeX入门学习(8)(术语)
  10. JavaSE Lambda 表达式