请求生命周期
Nginx 请求生命周期
在 Nginx 中,处理一次请求的整个生命周期涉及到 master 进程和 worker 进程的协同工作。以下是详细介绍每个阶段中 master 进程和 worker 进程的作用:
1. 初始化阶段
- master 进程:负责读取和验证 Nginx 配置文件,初始化工作环境。
- worker 进程:由 master 进程根据配置文件中定义的 worker_processes 参数创建,数量通常与服务器的 CPU 核数一致,以充分利用多核特性。
2. 监听和接受连接阶段
- master 进程:在初始化完成后,master 进程会监听配置中指定的端口。
- worker 进程:负责接受来自客户端的连接请求。由于 worker 进程与 CPU 核心绑定,可以高效地处理并发连接。
3. 处理请求阶段
- master 进程:不直接参与请求的处理,主要负责监控和管理 worker 进程。
- worker 进程:每个 worker 进程只有一个线程,它们独立处理请求,执行如解析请求头、查找配置、重写 URI、访问权限检查等任务,并将结果返回给客户端。
4. 发送响应阶段
- master 进程:继续监控 worker 进程的状态,确保系统稳定运行。
- worker 进程:负责将响应数据发送回客户端,并记录访问日志。
5. 关闭连接阶段
- master 进程:不直接参与连接的关闭。
- worker 进程:在完成响应后,负责关闭与客户端的连接。
6. 重载和退出阶段
- master 进程:处理信号如 SIGTERM 来平滑退出或重新加载配置文件,创建新的 worker 进程来替换旧的 worker 进程,从而不影响正在处理的请求。
- worker 进程:在收到退出信号后,完成当前请求的处理,然后退出。
总结:
- 客户端发起的所有请求均由 worker 进程处理,而 master 进程不直接参与处理这些请求。
- 也就是说,客户端发起请求只使用了 worker 进程用户权限,不会涉及到 master 进程用户权限
问题:浏览器是否具备 Nginx worker 进程用户的权限?
浏览器作为客户端,不具备 nginx worker 进程用户的任何权限,浏览器只是通过建立的 TCP 连接来接收 Nginx worker 进程发送的内容
PHP-FPM 请求生命周期
php-fpm 处理一次请求的生命周期包括请求接收、请求处理和请求结束三个阶段:
1. 请求接收阶段
当 php-fpm 的 master 进程接收到一个来自 Web 服务器(如 Nginx)的请求时,它会加锁以避免多个 worker 进程同时处理同一个请求,这在 Linux 中称为"惊群问题"。
Master 进程随后会指派一个可用的 worker 进程来处理这个请求。如果没有可用的 worker 进程,将返回错误,这也是在使用 Nginx 配合 php-fpm 时可能遇到 502 错误的一个原因。
2. 请求处理阶段
被指派的 worker 进程开始处理请求。这个过程中,worker 进程会执行 PHP 脚本并生成响应结果。如果处理过程超时,可能会返回 504 错误。
Worker 进程内部嵌入了 PHP 解释器,是 PHP 代码实际执行的地方。
3. 请求结束阶段
一旦 worker 进程完成了请求处理,它会将结果返回给 Web 服务器,从而完成整个请求的处理周期。
