Nginx教程:进程和运行时控制

2023年 7月 12日 17.2k 0

NGINX在运行时启动的过程以及如何控制它们。

在这个部分中,主要涉及两个部分的内容:

  • 主进程和工作进程
  • 控制NGINX

1. 主进程和工作进程

NGINX有一个主进程和一个或多个工作进程。 如果启用缓存,缓存加载程序和缓存管理器进程也将在启动时运行。 主程序的主要目的是读取和评估配置文件以及维护工作进程。

工作进程执行请求的实际处理。 NGINX依赖于操作系统的机制来有效地在工作进程之间分配请求。 工作进程的数量可在nginx.conf配置文件中定义,可以针对给定的配置进行修复,或者自动调整为可用CPU内核数。

2. 控制NGINX

要重新加载配置文件,可以停止或重新启动NGINX,或者发送信号到主进程。 可以使用-s参数运行nginx命令(调用NGINX可执行文件)来发送信号。

nginx -s signal

信号的值可以是以下之一:

  • quit – 正常地关闭
  • reload – 重新加载配置文件
  • reopen – 重新打开日志文件
  • stop – 立即关闭(快速关闭)

杀死实用程序也可以使用,将信号直接发送到主进程。 默认情况下,主进程的进程ID被写入位于/usr/local/nginx/logs/var/run目录中的nginx.pid文件。 nginx可以用信号控制。 默认情况下,主进程的进程ID将写入文件/usr/local/nginx/logs/nginx.pid。 该名称可能在配置时更改,或使用pid指令在nginx.conf文件中进行更改。主程序支持以下信号:

  • TERM, INT - 快速关闭
  • QUIT - 正常关闭
  • HUP - 改变配置,跟上改变的时区(仅适用于FreeBSD和Linux),使用新配置启动新的工作进程,正常关闭旧的工作进程
  • USR1 - 重新打开日志文件
  • USR2 - 升级可执行文件
  • WINCH - 正常关闭工作进程

个别工作进程可以用信号来控制,尽管这不是必需的。 支持的信号有:

  • TERM, INT - 快速关闭
  • QUIT - 正常关闭
  • USR1 - 重新打开日志文件
  • WINCH - 调试异常终止(需要启用debug_points)

更改配置

为了使nginx重新读取配置文件,应将HUP信号发送到主进程。 主进程首先检查语法有效性,然后尝试应用新配置,即打开日志文件和新的监听套接字。 如果失败,它会回滚更改,并继续使用旧配置。 如果此操作成功,它将启动新的工作进程,并向旧的工作进程发送消息,请求它们正常关闭。 旧工作进程密切监听套接字,并继续为旧客户端服务。 在所有客户端被服务之后,旧的工作进程被关闭。

我们来举例说明一下。 想象一下,nginx是在FreeBSD 4.x上运行,执行以下命令:

ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'

产生以下输出:

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
33127 33126 nobody   0.0  1380 kqread nginx: worker process (nginx)
33128 33126 nobody   0.0  1364 kqread nginx: worker process (nginx)
33129 33126 nobody   0.0  1364 kqread nginx: worker process (nginx)

如果将HUP发送到主进程,则输出变为:

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33129 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)
33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33135 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)

PID 33129的老工作流程仍然继续运行。 一段时间后,它退出:

 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  1368 kqread nginx: worker process (nginx)
33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)

循环日志文件 要循环日志文件,需要首先重命名。 之后,USR1信号应发送到主进程。 然后,主进程将重新打开所有当前打开的日志文件,并将其分配给正在运行的工作进程的非特权用户作为所有者。 成功重新打开后,主程序关闭所有打开的文件,并将消息发送到工作进程,要求他们重新打开文件。 工作进程也会打开新文件并立即关闭旧文件。 因此,旧文件几乎立即可用于后处理,如压缩。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论