跳过正文

Nginx Working

171 字·1 分钟· loading · loading ·
nginx
小橘子Single
作者
小橘子Single
人生如戏,全靠演技

Nginx安装目录介绍

  • Nginx服务器的安装目录中主要包括了conf、html、logs、sbin等4个目录。
  • conf: 目录中存放了Nginx的所有配置文件。其中,nginx.conf文件是Nginx服务器的主配置文件,其他配置文件使用来配置Nginx的相关功能的。比如,配置fastcgi使用的fastcgi.conffastcgi_params两个文件。所有的配置文件都提供了以.default结尾的默认配置文件,方便我们将配置过的.conf文件恢复到初始状态。
  • html: 目录中存放了Nginx服务器在运行过程中调用的一些HTML网页文件。
  • logs: 是用来存放Nginx服务器的日志文件的。Nginx的日志功能比较强大,有不同的种类,并且可以自定义输出格式内容等。
  • sbin: 目录存放名称为nginx的二进制文件,是Nginx主程序。

Nginx服务的信号控制

   Nginx服务在运行时,会保持一个主进程和一个或多个worker process工作进程。通过给Nginx服务器的主进程发送信号就可以控制服务的启停了。如何给主进程发送信号,需要知道Nginx主进程的进程号PID
   获取PID有两个途径:一个是,在Nginx服务启动以后,默认在Nginx服务器安装目录下的logs目录中会生产文件名为nginx.pid文件,此文件中保持的就是Nginx服务主进程的PID。这个文件的存放路径和文件名都可以在Nginx服务器的配置文件中进行配置。第二个获取Nginx服务主进程PID的方法是使用Linux平台下查看进程的工具ps

Nginx服务可接收的信号

信号作用
TERM 或 INT快速停止Nginx服务
QUIT平缓停止Nginx服务
HUP使用新的配置文件启动进程,之后平缓停止原有进程,也就是所谓的 “平滑重启”
USR1重新打开日志文件,常用于日志切割。
USR2使用新版本的Nginx文件启动服务,之后平缓停止原有的Nginx进程,也就是所谓的 “平滑升级”
WINCH平缓停止worker process,用于Nginx服务器平滑升级

   向Nginx服务主进程发送信号也有两种方法。一种是使用Nginx二进制文件。另一种是使用kill命令发送信号。

kill SIGNAL PID

# SIGANL 用于指定信号,即指定表中的某一个
# PID 指定Nginx服务主进程的PID,也可以使用nginx.pid动态获取PID号。

kill SIGNAL `filepath`

# filepath 为 nginx.pid的路径。

Nginx服务的启动

  • Nginx 使用说明
参数说明
-?,-h显示帮助信息。
-v打印Nginx版本号。
-V打印Nginx版本号和编译信息。
-t检查Nginx服务器配置文件是否有语法错误。
-q可以与 “-t” 联用,如果配置文件没有错误,则不输出任何信息。
-c指定启动Nginx服务使用的配置文件。可以与 “-t” 联用,使输出内容更详细,对查找配置文件中的语法错误很有帮助
-s signal用来向Nginx服务的主进程发送信号。stop, quit, reopen, reload
-p prefix用来改变Nginx的安装路径,常用在平滑升级Nginx服务器的场合
-g directives用来补充Nginx配置文件,向Nginx服务指定启动时应用于全局的配置

Nginx服务的停止

停止Nginx服务有两种方法:

  • 快速停止:是指立即停止当前Nginx服务正在处理的所有网络请求,马上丢弃连接,停止工作。
  • 平缓停止:是指允许Nginx服务将当前正在处理的网络请求处理完成,但不再接收新的请求,之后关闭连接,停止工作。
./nginx -g TERM | INT | QUIT

# TERM 和 INT 信号用于快速停止,QUIT用于平缓停止。
# 或者:
kill TERM | INT | QUIT  `/nginx/logs/nginx.pid`

# 当然也可以使用kill命令向Nginx进程发送-9 或者SIGKILL信号强制关闭Nginx服务,但不建议这样使用。
kill -9 | SIGKILL `/nginx/logs/nginx.pid`

Nginx服务的重启

   更改Nginx服务器的配置和加入新模块后,如果希望当前的Nginx服务应用新的配置或使用新模块生效,就需要重启Nginx服务。
   平滑重启是这样一个过程,Nginx服务进程接收到信号后,首先读取新的Nginx配置文件,如果配置语法正确,则启动新的Nginx服务,然后平缓关闭旧的服务进程;如果新的Nginx配置有问题,将显示错误,仍然使用旧的Nginx进程提供服务。
   使用以下命令实现Nginx平滑重启

./nginx -g HUP [-c newConfFile]

# HUP 信号用于发送平滑重启信号
# newConfFile, 可选项,用于指定新配置文件的路径

kill HUP '/nginx/logs/nginx.pid'
# 也可以实现平滑重启

Nginx服务器的升级

  如果要对当前的Nginx服务器进行版本升级,应用新模块,最简单的方法就是停止当前Nginx服务,然后开启新的Nginx服务,但这样就会导致在一段时间内,用户无法访问服务器。为了解决这个问题,Nginx服务器提供平滑升级的功能。
  平滑升级的过程是这样的,Nginx服务接收到USR2信号后,首先将旧的nginx.pid文件添加后缀.oldbin,变为nginx.pid.oldbin文件;然后执行新版本Nginx服务器的二进制文件启动服务。如果新的服务启动成功,系统中将有新旧两个Nginx服务共同提供Web服务。之后,需要向旧的Nginx服务进程发送WINCH信号,使旧的Nginx服务平滑停止,并删除nginx.pid.oldbin文件。在发送WINCH信号之前,可以随时停止新的Nginx服务。

注意:
  为了实现Nginx服务器的平滑升级,新的服务器安装路径应该和旧的保持一致。因此建议在安装新的服务器之前先备份旧的服务器。如果由于某种原因无法保持新旧服务器安装路径一致,则可以先使用以下命令将旧服务器的安装路径更改为新服务器的安装路径。

./nginx -p newInstallPath

newInstallPath 为新服务器的安装路径。之后备份旧服务器,安装新服务器即可。 做好准备工作以后,使用以下命令实现Nginx服务的平滑升级

./nginx -g USR2
# 或者
kill USR2 `/nginx/logs/nginx.pid`

USR2信号用于发送平滑升级信号。 通过ps -ef |grep nginx 查看新的Nginx服务启动正常,再使用:

./nginx -g WINCH
# 或者
kill WINCH '/nginx/logs/nginx.pid'

WINCH信号用于发送平滑停止旧服务信号。这样就在不停止提供Web服务的前提下完成了Nginx服务器的平滑升级。