本文将对 nginx 进行了基本介绍,并描述了一些可以使用 nginx 完成的简单任务。
nginx 有一个主进程(master process)和几个工作进程(worker process)。主进程的主要目的是读取和评估 nginx 配置,以及维护工作进程。
工作进程(worker process)用来处理客户端发起的实际请求。
nginx 采用基于事件(event-based)模型和依赖于操作系统(OS-dependent)的机制来有效地在工作进程之间分配请求。
工作进程的数量可以在 nginx.conf 配置文件中进行定义,并且可以针对给定的配置固定或自动调整为可用 CPU 内核的数量(关于如何配置工作进程数量,请参阅 worker_processes)。
示例配置:
#user nobody; worker_processes 3;
上面配置了3个工作进程。
nginx 及其模块的工作方式均在 nginx 配置文件中设置。默认情况下,配置文件名为 nginx.conf 并放置在目录/usr/local/nginx/conf、/etc/nginx 或 /usr/local/etc/nginx 中。Windows 系统中,nginx 配置文件位于 %nginx_home%/conf 目录下面。
要启动 nginx 服务,请运行 nginx 可执行文件(Linux 为 nginx,Window 为 nginx.exe)。 nginx 一旦成功启动,就可以通过使用 -s 参数调用 nginx 可执行文件来控制它。使用以下语法:
nginx -s signal
其中 signal 可能是以下之一:
stop — 快速停止 nginx 服务,即使 nginx 当前正在处理请求,也停止它。
quit — 优雅的停止 nginx 服务,当我们发送该命令后,nginx 将不再接收新请求,等待 nginx 当前正在处理请求完成,所有正在处理的请求均处理完成后才停止。
reload — 重新加载 nginx.conf 配置文件
reopen — 重新打开日志文件
例如:要停止 nginx 进程以等待工作进程完成当前请求的服务,可以执行以下命令:
nginx -s quit
注意:此命令应在启动 nginx 的同一用户下执行,即使用 test 用户启动,也需要 test 用户去执行上面命令。
在重新加载配置(nginx -s reload)的命令发送到 nginx 或重新启动 nginx 之前,不会将配置文件中所做的更改应用到 nginx。要重新加载配置,请执行如下命令:
nginx -s reload
一旦主进程(master process)收到重新加载配置的信号,它会检查新配置文件的语法有效性并尝试应用其中提供的配置。如果成功,主进程启动新的工作进程并向旧的工作进程发送消息,请求它们关闭。否则,主进程将回滚更改并继续使用旧配置。旧的工作进程,接收到关闭命令,停止接受新连接并继续为当前请求提供服务,直到所有此类请求都得到服务。之后,旧的工作进程退出。
也可以借助 Unix 工具(例如 kill 实用程序)向 nginx 进程发送信号。在这种情况下,信号会直接发送到具有给定进程 ID 的进程。nginx 主进程的进程 ID 默认写入 /usr/local/nginx/logs 或 /var/run 目录下的 nginx.pid(Windows 系统下,进程ID位于 %nginx_home%/conf/nginx.pid)。例如,如果主进程 ID 是 1628,要发送 QUIT 信号导致 nginx 正常关闭,请执行:
kill -s QUIT 1628
要获取所有正在运行的 nginx 进程的列表,可以使用 ps 实用程序。命令如下:
ps -ax | grep nginx
在 Window 系统中,使用 tasklist 命令。命令如下:
tasklist | findstr nginx
有关向 nginx 发送信号的更多信息,请参阅“控制 nginx”。