原文

nginx 通过信号来控制。对应linux系统就是用kill命令。

The command kill sends the specified signal to the specified process or process group. If no signal is specified, the TERM signal is sent.

master进程id在默认写入到/nginx/logs/nginx.pid文件中。文件也可以在nginx.conf文件中指定。master进程支持以下信号:

kill -TERM `cat ./logs/nginx.pid` #快速停止master进程。
kill -QUIT `cat ./logs/nginx.pid` #优雅的停止。
kill -HUB `cat ./logs/nginx.pid` #改变配置文件。开启一个新的worker进程处理,优雅的停止老的worker 进程。相当于nginx -s reload
kill -USR1 `cat ./logs/nginx.pid` #重新打开log文件。-s reopen命令
kill -USR2 `cat ./logs/nginx.pid` #升级可执行文件。热部署
kill -WINCH `cat ./logs/nginx.pid` #优雅的关闭worker进程。

每个worker进程也可以接收信号:

kill -TERM xxx #快速关闭worker进程
kill -QUIT xxx #优雅退出
kill -USR1 xxx #重新打开日志文件,先mv一个,再去执行这个命令。-s reopen命令

更改配置文件

  1. 发送HUP信号给master进程。
  2. master检查新的配置文件语法是否合理。
  3. 如果合理,根据新的配置文件打开新的socket连接监听。会创建新的worker进程,然后通知老的worker进程优雅的关闭。老进程收到消息后完成当前客户端的请求,然后自动关闭。
  4. 如果不合理,回滚,使用原先的配置文件继续运行。

日志切割

  1. 手动重命名log文件。
  2. 给master进程发送USR1信号。
  3. 重新打开文件。

热部署

  1. 备份一下原先的nginx文件。

  2. 把新的nginx二进制文件放到原先相同目录下。

  3. 给master进程发送USR2信号。

  4. master进程会把logs/nginx.pid文件复制一份为logs/nginx.pid.oldbin,然后运行新的nginx文件,生成新的worker进程。

  5. 新老master和worker共存。(如果没有成功可以看logs/error.log是否有日志)

  6. 给老master进程发送WINCH信号,老master就会发送信号让他对应的worker进程优雅的退出。QUIT信号。

  7. 然后就剩新的master和worker进程,以及老的master进程。

注意:老的master进程不会退出。可以用于必要时候的回滚操作。有两种情况。

  • 给老的master进程发送HUP信号,它会以不读取nginx.conf的方式启动新的worker进程。然后再给新的master进程发送QUIT信号让他优雅的退出。
  • 给新的master进程发送TERM信号,它会通知自己的worker进程立即退出。如果退出不成功,使用kill让worker进程强制退出。新的master退出之后,老的master进程会自动启动新的worker进程。

如果回滚,那么第四步的nginx.pid.oldbin文件会被丢弃。

如果升级成功,就给老的master进程发送QUIT信号,让其优雅的退出。

Nginx-3.控制nginx的更多相关文章

  1. SHELL编写NGINX服务控制脚本

    使用源码包安装的Nginx没办法使用"service nginx start"或"/etc/init.d/nginx start"进行操作和控制,所以写了以下的 ...

  2. 运行和控制Nginx

    Nginx命令行选项 启动.停止.重启nginx命令 如何重新加载nginx配置文件 nginx程序不重启平滑升级可执行文件   nginx命令行参数 不像许多其他软件系统,Nginx 仅有几个命令行 ...

  3. 运行和控制Nginx——命令行参数和信号

    参考资料: Nginx中文文档: http://www.nginx.cn/nginxchscommandline Nginx的启动.停止.平滑重启.信号控制和平滑升级:http://zachary-g ...

  4. 控制nginx并发链接数量和客户端请求nginx的速率

    一.控制nginx并发链接数 ngx_http_limit_conn_module这个模块用于限制每个定义的key值的链接数,特别是单IP的链接数. 不是所有的链接数都会被计数,一个符合计数要求的连接 ...

  5. 使用python控制nginx禁封ip

    python控制nginx禁封ip nginx中的access.log最近有大量的用户访问,怎么样屏蔽掉在一定时间段内访问次数多的ip呢? 测试准备: 两个tomcat,一个nginx做均衡负载,服务 ...

  6. 如何源码编译安装并控制nginx

    安装nginx 注意 Linux操作系统需要2.6及其以上的内核(支持epoll) 使用nginx的必备软件 gcc编辑器 yum -y install gcc gcc-c++ pcre库(支持正则表 ...

  7. Nginx 目录结构、Nginx服务控制命令

    # Nginx目录结构 # 首先推荐一个查看目录结构的工具 tree # yum install -y tree # sudo apt-get install -y tree ubuntu # 查看n ...

  8. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  9. Nginx配置文件(nginx.conf)配置详解(2)

    Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...

  10. linux下配置nginx使用service nginx start 服务

    解压出来后执行 mkdir /var/tmp/nginx/client/ -pv 接下来我们简单的为它提供一个服务脚本吧! # vim  /etc/init.d/nginx 新建文件/etc/rc.d ...

随机推荐

  1. 读取纯真IP数据库

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <stdli ...

  2. linux入门系列10--firewalld防火墙管理

    上一篇文章学习了用户及文件相关权限,本篇继续学习防火墙技术. 防火墙作为公网与内网之间的保护屏障,对系统至关重要.防火墙又分为硬件防火墙和软件防火墙,主要功能都是依据设置的策略对穿越防火墙的流量进行过 ...

  3. css: line-height 与box-sizing

    css 1.line-hight: 行高line-height,是文本行基线这件的距离,不是字体大小,它确定了各个元素框的高度增加或减少多少. 对于块级元素:定义了元素中文本基线之间的最小距离. li ...

  4. Sklearn——SVC学习笔记(图像分割)

    新年第二更. 很长时间前就想总结一下用SVC来做图像分割的方法了,方法实现了,但是一直没有总结,今天再来回顾一遍. 首先介绍一下.今天要总结的图像分割其实属于像素级分类,其输出是把图像按照不同的类别逐 ...

  5. 12-Tomcat&Servlet:

    今日知识 1. web相关概念回顾 2. web服务器软件:tomcat 3. servletr入门学习 web相关概念回顾 1. 软件架构 1. C/S:客户端/服务器端 2. B/S:浏览器/服务 ...

  6. docker启动nginx的ssl配置

    前提条件 一台云服务器(阿里云.腾讯云等的centOS) 服务器上面要有docker(安装方法这里不做介绍) 一个域名 ssl证书(两个文件:一个key后缀,一个pem后缀:生成方法很多这里不再介绍) ...

  7. MySQL中的幻读,你真的理解吗?

    昨天接到阿里的电话面试,对方问了一个在MySQL当中,什么是幻读.当时一脸懵逼,凭着印象和对方胡扯了几句.面试结束后,赶紧去查资料,才发现之前对幻读的理解完全错误.下面,我们就聊聊幻读. 要说幻读,就 ...

  8. 前端html,css考点

    1, 内联元素,块级元素相关知识点 参考链接:https://edu.aliyun.com/a/103378 (1)置换元素 概念:浏览器根据元素的标签和属性,来决定元素的具体显示内容.<img ...

  9. leetcode--js--Longest Substring Without Repeating Characters

    问题描述: Given a string, find the length of the longest substring without repeating characters. Example ...

  10. js , forEach 用法

    person.forEach((item,index) => { console.log( item.id ); if( id == item.id ){ item.is_selected = ...