1.重载

修改nginx配置文件之后,在不影响服务的前提下想加载最新的配置,就可以重载配置即可。

操作如下:

  1)修改nginx配置文件

  2)nginx -t     检查nginx文件语法是否有误

  3)nginx -s reload    重载nginx配置

2.热部署(升级nginx版本)

比如我把版本冲nginx1.14-2升级到nginx1.16.1;

我之前nginx安装目录为:/data/geek/nginx目录

操作如下:

  注意:千万不要make insatll 否则会把二进制执行文件复制到/data/geek/下的nginx目录 覆盖之前的文件

  1)下载最新的nginx1.16.1版本

  2)执行./configure --prefix=/home/geek/nginx     #新版本的nginx执行这步--prefix目录可以随便指,最后千万不能make install。否则nginx二进制文件会找新的nginx生成的文件。

    

  3)  编译make,make之后会在objs下面生成一个nginx二进制执行文件

    

  4)备份老的nginx二进制配置文件

[root@nginx sbin]# cd /data/geek/nginx/sbin

[root@nginx sbin]# cp nginx nginx.old

 

  5)拷贝objs目录下新的nginx二进制执行文件到/home/geek/nginx/sbin/目录

[root@nginx objs]# pwd
/data/geek/nginx-1.16.1/objs
[root@nginx objs]# ls
autoconf.err nginx ngx_auto_config.h ngx_modules.c src
Makefile nginx.8 ngx_auto_headers.h ngx_modules.o
[root@nginx objs]# cp nginx /data/geek/nginx/sbin/ -f
cp: overwrite ‘/data/geek/nginx/sbin/nginx’? y
[root@nginx objs]#

  6)检查当前Nginx版本是否为新版本

[root@nginx sbin]# pwd
/data/geek/nginx/sbin
[root@nginx sbin]# ls
nginx nginx.old
[root@nginx sbin]# ./nginx -V
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
configure arguments: --prefix=/data/geek/nginx
[root@nginx sbin]#

  注意:虽然当前版本已经变成了1.16.1版本,这个时候表面上看起来是更新成了新版本,但还是旧版本的在工作,接收客户端请求的仍然是1.14.2版本的nginx,这就有了下面的平滑升级

3.平滑升级

  继续上面的操作来:

  1)kill -USR2 旧版本的主进程号 (让旧版本的worker进程不再接受请求)

    这步操作完之后,新版本的nginx进程就起来了,ps -ef |grep nginx 就可以看到二个nginx的master进程,旧的nginx master进程已经不在监听80端口了。新的请求由新的nginx进程处理

  2)kill -WINCH 旧版本的主进程号 (关闭旧版本的worker进程)

  3)这个时候就已经平滑升级完毕了

命令 作用
kill -USER2 进程号 不再让worker进程接受请求,当前请求处理完就让worker进程退出
kill -WINCH 进程号 处理完关闭
kill -HUP 进程号 启动进程

最后提供一张平滑升级流程图:

  

4.日志切割

  1)备份之前的日志 

[root@nginx logs]# ll
total 12
-rw-r--r-- 1 root root 1721 Nov 28 20:31 access.log
-rw-r--r-- 1 root root 1686 Nov 28 20:31 error.log
-rw-r--r-- 1 root root 6 Nov 28 20:32 nginx.pid [root@nginx logs]# ls
access.log error.log nginx.pid
[root@nginx logs]# mv access.log access.log.bak

 这里直接用mv命令备份日志文件就可以,因为linux文件系统中,改名并不会影响已经打开文件的写入操作,内核inode不变,这样就不会出现丢日志了。

  2)nginx -s reopen 重新生成log文件

[root@nginx logs]# ../sbin/nginx -s reopen
[root@nginx logs]# ll
total 12
-rw-r--r-- 1 nobody root 0 Nov 28 20:36 access.log
-rw-r--r-- 1 root root 2109 Nov 28 20:35 access.log.bak
-rw-r--r-- 1 nobody root 1747 Nov 28 20:36 error.log
-rw-r--r-- 1 root root 6 Nov 28 20:32 nginx.pid

  

4.1一般写一个脚本然后加个定时任务进行切割,如果我下面的脚本放在crontab里一天执行一次

kill -USR1 nginx进程号    也是重新生成日志文件,和nginx -s reopen是一样的。

Nginx热部署 平滑升级 日志切割的更多相关文章

  1. Nginx 热部署和日志切割,你学会了吗?

    上篇文章,我们已经安装好 Nginx,并且配置好 Nginx 文件后,这个时候我就需要操作 Nginx 的命令行了,这篇文章主要讲解 Nginx 命令行相关知识,并通过日常遇到的热部署.切割日志文件场 ...

  2. 原创|1分钟搞定 Nginx 版本的平滑升级与回滚

    Nginx无论是对于运维.开发.还是测试来说,都是日常工作需要掌握的一个知识点,之前也写过不少关于Nginx相关的文章: Nginx服务介绍与安装 Nginx服务配置文件介绍 Nginx配置虚拟主机 ...

  3. nginx信号及平滑升级

    1.nginx信号 nginx进程处理命令: kill -signals PID PID即nginx进程ID signals的参数解释如下所示: TERM,INT快速关闭进程 QUIT优雅的关闭,如果 ...

  4. Nginx安装、平滑升级与虚拟机配置

    Nginx 高性能HTTP反向代理服务器,也是 LAMP/POP3/SMTP代理服务器 由内核和模块组成,内核通过找配置文件讲客户端请求映射到一个location(location是Nginx配置中的 ...

  5. nginx中有关命令和日志切割,配置文件加载的详细阐述

    一.Nginx简介 Nginx (“engine x”) 是俄罗斯人Igor Sysoev(塞索耶夫)编写的一款高性能的 HTTP 和反向代理服务器.Nginx 已经在俄罗斯最大的门户网站── Ram ...

  6. Nginx 热部署最版本

    L10 进入nginx里的sbin目录 拷贝原先的做备份 cp nginx nginx.old 然后将已经编译好的nginx二进制文件复制到sbin目录下并覆盖原有的二进制文件 kill -USR2 ...

  7. Nginx服务器的平滑启动、平缓停止、平滑升级

    注:Nginx服务在运行时,会保持一个主进程(master process)和一个或多个工作进程(worker process). 每一个进程都会有一个PID进程号,可以通过向主进程的PID进程号发送 ...

  8. nginx之热部署,以及版本回滚

    热部署的概念:当从老版本替换为新版本的nginx的时候,如果不热部署的话,会需要取消nginx服务并重启服务才能替换成功,这样的话会使正在访问的用户在断开连接,所以为了不影响用户的体验,且需要版本升级 ...

  9. Nginx 平滑升级、Nginx的一些基础配置

    # Nginx 平滑升级 # 方案一:使用Nginx服务信号进行升级 # 1.将就版本的sbin目录下可执行nginx进行备份(mv nginx nginxold) # 2.将新版本 configur ...

随机推荐

  1. Leetcode Tags(13)Bit Manipulation

    一.477.汉明距离总和 输入: , , 输出: 解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010.(这样表示是为了体现后四位之间关系) HammingDistance( ...

  2. django-URL重定向(八)

    HttpResponseRedirect()不常用 redirect(to,permanent=False,*args,**kwargs) to:指重定向的位置,可以是视图,也可以是url地址,也可以 ...

  3. Web购物车案例(servlet+bean+jsp)

    一些B话 事情来得太突然,一个朋友说是要我帮忙做一个JavaWeb的课程设计,在过一天就要去答辩了- 这我哪受的了时间这么短还没有~~~,正准备委婉的拒绝的时候他说写完之后给我那个啥- 好吧,我就是这 ...

  4. WinDag基础1

    建立调试会话 用户层调试会话的建立 直接创建进程并调试 附加到已经打开的进程 侵入式附加:接管正在运行的进程,可以进行调试 非侵入式附加:只能读取进程信息,不能接收目标进程的调试事件 通常情况下一个程 ...

  5. linux IMX6 汇编点亮一个LED灯

    驱动Linux引脚与驱动STM32其实是一样的,都是在操作寄存器,在相应的寄存器上附上相应的值即可驱动. IMX6U手册上有各个管脚的命名,跟STM32不同,IOMUXC_SW_MUC_CTL_PAD ...

  6. Nginx专题(1):Nginx之反向代理及配置

    摘要:本文从Nginx的概念出发,分别从反向代理的概念.优势.配置代码3个方面介绍了Nginx的特性之一反向代理. 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第一期-宜信支付结算八方 ...

  7. SpringBoot中在除Controller层 使用Validation的方式

    说明:Validation 在Controller层使用Validation应该都使用过了,以下方式可以使用 Validation 在Service层完成对dto的属性校验,避免写一堆的 if els ...

  8. idea 2019 1 spring boot 启动报错 An incompatible version [1.2.12] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]

    1.构建一个简单springboot工程,日志打印报错内容如下: 15:38:28.673 [main] DEBUG org.springframework.boot.devtools.setting ...

  9. Wininet-Post

    #include "stdafx.h"#include <Windows.h>#include <wininet.h>#include <iostre ...

  10. 暑期集训20190725 胜地不常(paradise)

    [题目描述] 给定两个长度为n的非负整数数组a,b, [输入数据] 第一行一个整数n. 第二行n个整数a1~an. 第三行n个整数b1~bn. [输出数据] 一行一个整数表示答案. [样例输入] 4 ...