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是一样的。

最新文章

  1. 使用Git的Push出现rejected - non-fast-forward错误
  2. GitHub学习心得之 简单操作
  3. jsp动作元素之forward指令
  4. powerdesigner 绘制表关系和导出sql
  5. 鼠标滚动插件smoovejs和wowjs
  6. sdutoj 2603 Rescue The Princess
  7. iOS - Swift Dictionary 字典
  8. CentOS 7安装iptables服务,以及常用命令
  9. What are the differences between small, minor, and major updates?
  10. 华为OJ培训主题 比赛统计
  11. YII2框架下使用PHPExcel导出柱状图
  12. Oracle的nvl
  13. SQL 游标的写法
  14. JAVA第3,4课(内容合并)
  15. Python全栈之路----常用模块----logging模块
  16. CentOS7安装Jenkins自动化部署maven项目
  17. css3时钟
  18. MongoDB地理空间数据存储及检索
  19. Windows导入EOS工程
  20. 用C++调用tensorflow在python下训练好的模型(centos7)

热门文章

  1. SpringBoot注入配置文件的3种方法
  2. pyarango整理
  3. 不需要怎么修改配置的Mybatis整合Spring要点
  4. 第三十二章 System V信号量(三)
  5. 在虚拟机上的关于Apache(阿帕奇)(4)基于域名访问网站
  6. 洛谷P5522 【[yLOI2019] 棠梨煎雪】
  7. K近邻(k-Nearest Neighbor,KNN)算法,一种基于实例的学习方法
  8. Java迭代Map方法
  9. MongoDB的基础命令
  10. 2019.NET Conf China(中国.NET开发者峰会)活动全纪录:.NET技术之崛起,已势不可挡