Nginx有一个主进程和几个工作进程,主进程的主要作用就是读取、评估配置文件和管理工作进程,工作进程对请求做实际处理。工作进程的数量是在配置文件中配置的,一般设置为cpu的核心数*线程数。

nginx可以通过信号控制,默认情况下,主进程的进程ID记录在/usr/local/nginx/logs/nginx.pid
文件中。信号可以通过nginx可执行文件发送给nginx (nginx -s
信号),也可以通过unix的kill命令发送给nginx,这种情况下是将信号直接发送给指定进程ID的进程,如:kill QUIT 1628。

nginx的安装参考:CentOS6.5编译安装Nginx的方法

1、启动nginx,直接运行nginx的可执行文件:

[root@localhost ~]# /usr/local/nginx/sbin/nginx  

2、停止nginx 快速关闭:nginx -s stop 或者kill -TERM 主进程号 或者kill -INT 主进程号

[root@localhost sbin]# pwd
/usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s stop

或者

[root@localhost sbin]# ps -ef |grep nginx|grep master
root 9879 1 0 13:15 ? 00:00:00 nginx: master process ./nginx
[root@localhost sbin]# kill -TERM 9879

或者

[root@localhost sbin]# kill -INT 9879  

优雅关闭(不接受新的连接请求,等待旧的连接请求处理完毕再关闭):nginx -s quit 或者 kill -QUIT 主进程号

[root@songguoliang sbin]# pwd
/usr/local/nginx/sbin
[root@songguoliang sbin]# ./nginx -s quit

注意:执行该命令的用户应该是启动nginx的用户

[root@localhost sbin]# ps -ef |grep nginx
root 9889 1 0 13:17 ? 00:00:00 nginx: master process ./nginx
nobody 9890 9889 0 13:17 ? 00:00:00 nginx: worker process
root 9893 2008 0 13:18 pts/1 00:00:00 grep nginx
[root@localhost sbin]# kill -QUIT 9889

3、重新加载配置文件:nginx -s reload  或者  kill -HUP 主进程号
nginx配置平滑更新
为了让主进程重新读取配置文件,应该向主进程发送一个HUP信号,主进程一旦接收到重新加载配置的的信号,它就检查配置文件语法的有效性,然后试图应用新的配置,即打开新的日志文件和新的socket

监听,如果失败,它将回滚配置更改并继续使用旧的配置,如果成功了,它开启新的工作进程,并给旧的工作进程发消息让它们优雅的关闭,旧的工作进程接收到关闭信号后,不再接收新的请求,如果已有请求正在处理,等当前请求处理完毕后关闭,如果没有请求正在处理,则直接关闭。

[root@localhost sbin]# ./nginx -s reload 

或者

[root@localhost sbin]# ps -ef|grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9949 9944 0 13:23 ? 00:00:00 nginx: worker process
root 9960 9917 0 13:28 pts/1 00:00:00 grep nginx
[root@songguoliang sbin]# kill -HUP 9944

4、测试配置文件,检查配置文件语法是否正确,然后试图打开文件涉及的配置:nginx -t

[root@localhost sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

5、查看nginx版本信息: nginx -v

[root@songguoliang sbin]# ./nginx -v
nginx version: nginx/1.10.1

6、查看nginx版本信息,编译版本,和配置参数:nginx -V

[root@songguoliang sbin]# ./nginx -V
nginx version: nginx/1.10.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
configure arguments: --prefix=/usr/local/nginx

7、重启日志文件,备份日志文件时常用:nginx -s reopen 或者 kill -USR1 主进程号

[root@localhost sbin]# ./nginx -s reopen 

或者

[root@localhost sbin]# kill -USR1 2030 

由于nginx是通过inode指向日志文件的,inode和文件名无关,所以即使把日志文件重命名,nginx还是将日志文件写入原文件,只有用上面的命令重新开启日志文件才能将日志写入新的日志文件。

8、nginx的平滑升级

如果你需要升级或者添加、删除服务器模块时,可以通过nginx的平滑升级,在不停止服务的情况下升级nginx。

(1)用新的nginx可执行程序替换旧的可执行程序,即下载新的nginx,重新编译到旧版本的安装路径中(重新编译之前可以备份旧的可执行文件)

(2)给nginx主进程号发送USR2信号

[root@localhost sbin]# kill -USR2 9944  

执行命令前的进程:

[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
root 10010 9917 0 13:42 pts/1 00:00:00 grep nginx

执行命令后的进程:

[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10015 9917 0 13:43 pts/1 00:00:00 grep nginx

给nginx发送USR2信号后,nginx会将logs/nginx.pid文件重命名为nginx.pid.oldbin,然后用新的可执行文件启动一个新的nginx主进程和对应的工作进程,并新建一个新的nginx.pid保存新的主进程号

[root@songguoliang logs]# pwd
/usr/local/nginx/logs
[root@songguoliang logs]# ll
总用量 16
-rw-r--r--. 1 nobody root 596 10月 8 13:02 access.log
-rw-r--r--. 1 nobody root 881 10月 8 13:43 error.log
-rw-r--r--. 1 root root 6 10月 8 13:43 nginx.pid
-rw-r--r--. 1 root root 5 10月 8 13:22 nginx.pid.oldbin
[root@songguoliang logs]# cat nginx.pid
10012
[root@songguoliang logs]# cat nginx.pid.oldbin
9944

这时,nginx的新的实例和旧的实例同时工作,共同处理请求连接。接下来要关闭旧的实例进程。

(3)给旧的主进程发送WINCH信号,kill -WINCH 旧的主进程号

[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
nobody 9965 9944 0 13:29 ? 00:00:00 nginx: worker process
root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10092 9917 0 14:05 pts/1 00:00:00 grep nginx
[root@localhost sbin]# kill -WINCH 9944
[root@localhost sbin]#
[root@localhost sbin]#
[root@localhost sbin]#
[root@localhost sbin]# ps -ef |grep nginx
root 9944 1 0 13:22 ? 00:00:00 nginx: master process ./nginx
root 10012 9944 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10094 9917 0 14:06 pts/1 00:00:00 grep nginx

旧的主进程号收到WINCH信号后,将旧进程号管理的旧的工作进程优雅的关闭。即一段时间后旧的工作进程全部关闭,只有新的工作进程在处理请求连接。这时,依然可以恢复到旧的进程服务,因为旧的进程的监听socket还未停止。

(4)给旧的主进程发送QUIT信号,使其关闭。

[root@localhost sbin]# kill -QUIT 9944
[root@localhost sbin]# ps -ef |grep nginx
root 10012 1 0 13:43 ? 00:00:00 nginx: master process ./nginx
nobody 10013 10012 0 13:43 ? 00:00:00 nginx: worker process
root 10118 9917 0 14:16 pts/1 00:00:00 grep nginx

给旧的主进程发送QUIT信号后,旧的主进程退出,并移除logs/nginx.pid.oldbin文件,nginx的升级完成。

中途停止升级,回滚到旧的nginx

在步骤(3)时,如果想回到旧的nginx不再升级

(1)给旧的主进程号发送HUP命令,此时nginx不重新读取配置文件的情况下重新启动旧主进程的工作进程。

[root@localhost sbin]# kill -HUP 9944

(2)优雅的关闭新的主进程

[root@localhost sbin]# kill -QUIT 10012  

注:如果由于某种原因,无法关闭新主进程的工作进程,直接给进程号发送KILL信号

nginx的进程分为主进程和工作进程,关于nginx的信号,主进程支持以下信号:
TERM,INT 快速关闭
QUIT 优雅的关闭
KILL 关闭一个顽固进程
HUP 改变配置,使用新配置开启新的工作进程,优雅的关闭旧的进程
USR1 重新开启日志文件
USR2 平滑升级nginx
WINCH 优雅的关闭工作进程

单个工作进程也可以通过信号控制,但它不是必须的。单个工作进程支持的信号有:
TERM,INT 快速关闭
QUIT 优雅的关闭
USR1 重新开启日志文件
WINCH 异常终止调试(需要启动debug_points)

nginx启动、重启、重新加载配置文件和平滑升级的更多相关文章

  1. []转帖]linux 上修改了nginx.conf 怎么重新加载配置文件生效

    linux 上修改了nginx.conf 怎么重新加载配置文件生效 https://www.cnblogs.com/zhuyeshen/ 步骤如下先利用/usr/local/nginx/sbin/ng ...

  2. linux 上修改了nginx.conf 怎么重新加载配置文件生效

    步骤如下先利用/usr/local/nginx/sbin/nginx -t测试配置文件修改是否正常/usr/local/nginx/sbin/nginx -s reload重新加载 nginx 更改配 ...

  3. nginx 配置 https,及加载配置文件夹

    首先需要去申请一个域名签名证书,在腾讯云,阿里云都有免费版,然后下载下来按如下配置,请根据自己路径更改 server { listen 80; server_name xxx.xxx.cn; root ...

  4. NGINX的启停命令、以及动态加载配置文件的命令

    -- 启动(不推荐):在nginx目录下有一个sbin目录,sbin目录下有一个nginx可执行程序../nginx -- 启动(指定配置文件,推荐)/usr/local/nginx/sbin/ngi ...

  5. Nginx常用命令(启动/重启/停止/测试配置文件/重新加载配置文件)

    Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的. Nginx 的参数包括有如下几个: 使用: /usr/local/ngin ...

  6. Nginx下修改php.ini后重新加载配置文件命令

    修改php.ini后 如,我的 php.ini 文件是放在 /etc/php.ini php 所在目录是 /www/Linux/php-5.2.17 修改 php.ini 后要用 php-fpm 来进 ...

  7. Spring Web项目spring配置文件随服务器启动时自动加载

    前言:其实配置文件不随服务器启动时加载也是可以的,但是这样操作的话,每次获取相应对象,就会去读取一次配置文件,从而降低程序的效率,而Spring中已经为我们提供了监听器,可监听服务器是否启动,然后在启 ...

  8. Nginx自动加载配置文件方案

    nginx自动加载配置文件方案一.nginx+consul+consul-template实现过程:consul作为服务发现软件,consul-template作为nginx配置文件的模板,consu ...

  9. Linux安装redis,启动配置不生效(指定启动加载配置文件)

    一.今天有个同学问我,为什么明明安装了redis,修改了配置,启动的时候,配置还是不生效.如下图是安装后的redis文件图. 二.想加载上图中的redis.conf,进入到src中寻找到启动文件red ...

随机推荐

  1. 在 ubuntu 中安装 python3.5 tornado pymysql

    一.在 ubuntu 中安装 python3.5 1.首先,在系统中是自带python2.7的.不要卸载,因为一些系统的东西是需要这个的.python2.7和python3.5是可以共存的. 命令如下 ...

  2. RSA 每次公钥加密不同结果

    今天服务器端一哥们突然跑过来跟我说:我发现公钥每次加密都不同结果啊? 我说:怎么可能?不同的话,私要怎么解密和验证啊? 然后我屁颠屁颠的试了下,结果发现不论在在线RSA的还是自己公司 利用同一个明文加 ...

  3. 《DSP using MATLAB》示例 Example 9.6

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  4. POJ3045 Cow Acrobats

    题意 Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away and join t ...

  5. FastAdmin 关于跨域问题解决

    FastAdmin 关于跨域问题解决 之前很久之前收集到社区的问题. https://forum.fastadmin.net/thread/277 今天又有人问到,无法打开,估计是网络问题. 以下为完 ...

  6. Web Service简介(一)

    这篇博文,我们对Web Service进行一个简单的介绍和认识,作为Web Service的入门.在学习之前,你需要对HTML和XML有基本的了解,Web Service并不难,而且非常的简单. 什么 ...

  7. 基于Oracle的EntityFramework的WEBAPI2的实现(二)——使用DbFirst

    之所以使用DbFirst而没有使用CodeFirst是因为考虑到现实的情况中,我们之所以会选择oracle而不是SQL SERVER,一方面是因为之前公司已经在使用Oracle,而且有好多我们需要用到 ...

  8. Oracle数据库clob字段导出为sql insert插入语句

    oracle数据库的clob字段导出为sql insert插入语句可以分三种情况:1,clob没有换行符:2,clob有换行符但不以分号结尾:3,clob有换行符并且以分号结尾. clob没有换行符使 ...

  9. java代码FileInputStream的复制粘贴练习

    所有的输入输出流都是对于程序来说的,这个图是实现文件内容的复制粘贴功能的e 首先把文件读到哦程序里,然后把程序读出到文件l package com.a.b; //这个复制和粘贴-----------首 ...

  10. nginx限制请求之二:(ngx_http_limit_req_module)模块

    相关文章: <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <n ...