nginx重载配置文件及平滑升级

Nginx命令行选项

启动、停止、重启nginx命令

如何重新加载nginx配置文件

nginx程序不重启平滑升级可执行文件

一、Nginx命令行选项

不像许多其他软件系统,Nginx 仅有几个命令行参数,完全通过配置文件来配置

-c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的。

-t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。

-v 显示 nginx 的版本。

-V 显示 nginx 的版本,编译器版本和配置参数。

nginx控制信号

可以使用信号系统来控制主进程。默认,nginx 将其主进程的 pid 写入到 /usr/local/nginx/nginx.pid 文件中。通过传递参数给 ./configure 或使用 pid 指令,来改变该文件的位置。

主进程可以处理以下的信号:

TERM, INT 快速关闭
QUIT 从容关闭
HUP 重载配置
用新的配置开始新的工作进程
从容关闭旧的工作进程
USR1 重新打开日志文件
USR2 平滑升级可执行程序。
WINCH 从容关闭工作进程

尽管你不必自己操作工作进程,但是,它们也支持一些信号:

TERM, INT 快速关闭
QUIT 从容关闭
USR1 重新打开日志文件

二、nginx 启动、停止、重启命令

nginx启动

sudo /usr/local/nginx/nginx     (nginx二进制文件绝对路径,可以根据自己安装路径实际决定)

nginx从容停止命令,等所有请求结束后关闭服务

ps -ef |grep nginx

kill -QUIT  nginx主进程号

nginx 快速停止命令,立刻关闭nginx进程

ps -ef |grep nginx

kill -TERM nginx主进程号

如果以上命令不管用,可以强制停止

kill -9 nginx主进程号

如果嫌麻烦可以不用查看进程号,直接使用命令进行操作
其中/usr/local/nginx/nginx.pid 为nginx.conf中pid命令设置的参数,用来存放nginx主进程号的文件
kill -信号类型(HUP|TERM|QUIT) `cat /usr/local/nginx/nginx.pid` 
例如

kill -QUIT `cat /usr/local/nginx/nginx.pid`

nginx重启命令

nginx重启可以分成几种类型

1.简单型,先关闭进程,修改你的配置后,重启进程。
kill -QUIT `cat /usr/local/nginx/nginx.pid`
sudo /usr/local/nginx/nginx
2.重新加载配置文件,不重启进程,不会停止处理请求
3.平滑更新nginx二进制,不会停止处理请求

三、使用信号加载新的配置

Nginx 支持几个信号,能在它运行时控制其操作。其中最普通的是 15 ,用来中止运行的进程:

# ps aux | egrep ‘(PID|nginx)‘
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2213  0.0  0.0   6784  2036 ?        Ss   03:01   0:00 nginx: master process /usr/sbin/nginx 
-c /etc/nginx/nginx.conf
# kill -15 2213

而最有趣的是能平滑改变 nginx 配置的选项(请注意,在重载前,要先测试一下配置文件):

#nginx -t -c /etc/nginx/nginx.conf
[info] 15686#0: the configuration file /etc/nginx/nginx.conf syntax is ok
[info] 15686#0: the configuration file /etc/nginx/nginx.conf was tested successfully
#ps aux | egrep ‘(PID|nginx)‘
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2213  0.0  0.0   6784  2036 ?        Ss   03:01   0:00 nginx: master process /usr/sbin/nginx
-c /etc/nginx/nginx.conf<strong># kill -HUP 2213</strong>

当 nginx 接收到 HUP 信号,它会尝试先解析配置文件(如果指定配置文件,就使用指定的,否则使用默认的),成功的话,就应用新的配置文件(例如:重新打开日志文件或监听的套接 字)。之后,nginx 运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字但是继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关闭。 如果新的配置文件应用失败,nginx 将继续使用旧的配置进行工作。

四、平滑升级到新的二进制代码

你可以在不中断服务的情况下 - 新的请求也不会丢失,使用新的 nginx 可执行程序替换旧的(当升级新版本或添加/删除服务器模块时)。

首先,使用新的可执行程序替换旧的(最好做好备份),然后,发送 USR2 (kill -USR2 pid)信号给主进程。主进程将重命名它的 .pid 文件为 .oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新的可执行程序,依次启动新的主进程和新的工作进程:

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
  33126    1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
  33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
  33135 33126 nobody   0.0  1380 kqread nginx: worker process (nginx)
  33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
  36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
  36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
  36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
  36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

在这时,两个 nginx 实例会同时运行,一起处理输入的请求。要逐步停止旧的实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭:

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
  33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
  33135 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)
  36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
  36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
  36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
  36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

一段时间后,旧的工作进程处理了所有已连接的请求后退出,就仅由新的工作进程来处理输入的请求了:

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
  33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
  36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
  36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
  36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
  36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

这时,因为旧的服务器还尚未关闭它监听的套接字,所以,通过下面的几步,你仍可以恢复旧的服务器:

  • 发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程
  • 发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程
  • 发送 TERM 信号给新的主进程,迫使其退出
  • 如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号

新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,这样,一切就都恢复到升级之前了。

如果尝试升级成功,而你也希望保留新的服务器时,发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行:

      PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
    36264     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
    36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)    
    36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)    
    36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

时间: 2024-10-09 10:48:44

nginx重载配置文件及平滑升级的相关文章

Nginx在线服务状态下平滑升级或新增模块的详细操作

今天应开发的需求,需要在Nginx增加一个模块,并不能影响现有的业务,所以就必须要平滑升级Nginx,好了,不多说了 1:查看现有的nginx编译参数 /usr/local/nginx/sbin/nginx -V 2:按照安装nginx的方法进行安装,只需要到make,千万不要make install 3: 备份旧版本的nginx可执行文件(期间nginx不会停止服务) mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

Nginx服务器 安装 与平滑升级详细介绍 &nbsp; 简单使用1

#nginx -V (-V 可以显示出当时的标准,添加了什么模块) [[email protected] nginx-1.8.0]# ./configure --help |grep proxy --without-http_proxy_module        disable ngx_http_proxy_module --http-proxy-temp-path=PATH        set path to store http proxy temporary files --with-

nginx编译安装和平滑升级

1.1.1  本文档为nginx安装及配置文档,主要实现http反向代理功能:作用是将nginx作为前端服务器,通过访问规则代理转发至后端对应的tomcat服务器 部署环境: 系统版本:Linux version 2.6.32-431.el6.x86_64(`cat /proc/version`) 安装及配置: 1安装nginx依赖环境 安装pcre库 #wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.ta

Nginx在线服务状态下平滑升级或新增模块

nginx在使用过程中,有时需要在不影响当前业务的情况下,进行升级或新增模块.nginx的升级有两种方法:1.半自动化升级:2.手动升级 不过都需要先查看安装的nginx版本和配置信息,然后前往官网下载所需的版本,并上传 [[email protected] ~]# nginx -V nginx version: nginx/1.14.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure arguments: --pre

nginx通过shell脚本平滑升级版本

1.简介 有时候nginx发布了新BUG或者添加了新的功能时,想要更新的时候服务又不能中断,这时候就要用到nginx的平滑升级了. 该脚本同样适用于添加新扩展,添加新扩展的时候只需要把更新的版本修改为当前版本,更新的时候把需要添加的扩展加上去即可.我这里nginx安装目录为/usr/local/nginx当前系统,阿里云ECS CentOS 7 64位 2.查看nginx版本与编译信息/usr/local/nginx/sbin/nginx -V 注:这里的扩展要记录下来(重要),等下升级的时候用

nginx添加模块与平滑升级

Nginx 添加第三方模块 众所周知Nginx是分成一个个模块的,比如core模块,gzip模块,proxy模块,每个模块负责不同的功能,除了基本的模块,有些模块可以选择编译或不编译进Nginx.官网文档中的Modules reference部分列出了nginx源码包的所有模块.我们可以按照自己服务器的需要来定制出一个最适合自己的Nginx服务器. 除了Nginx官网源码包提供了各种模块,Nginx还有各种各样的第三方模块.官方文档NGINX 3rd Party Modules也列出了Nginx

nginx 安装 与 平滑升级

首先获取两个 nginx 源码包 nginx-1.4.7.tar.gz nginx-1.6.2.tar.gz ------------安装nginx---------- # yum install -y gcc gcc-c++ make  //安装gcc由于实验环境缺少编译工具 # yum install -y pcre-devel zlib-devel    // nginx rewrite gzip 需要依赖的库 解压nginx # tar -xzvf nginx-1.4.7.tar.gz

源码安装nginx以及平滑升级

作者:尹正杰 这个博客不方便上传软件包,我给大家把软件包放到百度云了: 链接:http://pan.baidu.com/s/1eS3bn4u 密码:04a1 欢迎加入:高级运维工程师之路 598432640 操作平台: 1.创建ngxin用户,(用于管理nginx服务,您也可以随意指定的哟~) useradd -s /sbin/nologin nginx 2.安装基础环境 yum -y install gcc pcre-devel openssl-devel zlib-devel 3.安装ngi

nginx版本低,但是又不能关闭怎么办?一招教你平滑升级

1.查看现有的 nginx 编译参数 我这里以1.16.0为例升级到1.16.1(编译安装的才可以) [[email protected] ~]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.16.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabl