WordPress 主流程 + Nginx & PHP-FPM 通信机制

118 阅读2分钟

WordPress 主流程 + Nginx & PHP-FPM 通信机制

浏览器访问 URL(如 /hello-world/)
        │
        ▼
    NginxWeb 服务器)
        │
        └─ 使用 FastCGI 协议,通过 Socket 将请求发送至 ↓
        ▼
    PHP-FPMPHP 进程管理器)
        │
        └─ 启动 PHP 进程,执行 WordPress ↓
        ▼
    WordPress 执行主流程
        │
        └─ index.php(入口)
             ↓
        wp-blog-header.php
             ├── wp-load.php
             │    ├── wp-config.php(加载配置)
             │    └── wp-settings.php(初始化插件和主题等)
             │
             └── wp() 执行主逻辑
                     ↓
               $wp->main()
                  ├── parse_request()(解析 URL)
                  ├── query_posts()(创建 WP_Query)
                  ├── handle_404()(判断 404)
                  └── template-loader.php
                        ├── get_*_template()(查找模板文件)
                        ├── include($template)(加载 PHP 模板)
                        └── the_content()(渲染内容)
        │
        ▼
    生成最终 HTML 内容
        │
        ▼
PHP-FPM 返回 HTMLNginx
        │
        ▼
NginxHTML 响应发送给浏览器
        │
        ▼
浏览器解析并呈现页面

WordPress 和 Node.js 运行模型的根本不同

特性WordPressNode.js
执行方式每次请求执行一次脚本,处理完即销毁常驻内存的单进程服务,处理多个请求
生命周期短暂:每个请求一个独立进程/线程持久:一个 Node.js 应用可长时间运行
状态管理每次重新初始化(无状态)内存可持久保留变量、状态、连接
并发方式多进程或线程由 Web 服务器(如 PHP-FPM)控制事件驱动 + 异步非阻塞(单线程 + 事件循环)

什么是 PHP-FPM?

PHP-FPM(FastCGI Process Manager)是 PHP 的 FastCGI 实现,是一个独立运行的后台服务程序(daemon)。
它的作用是高效管理多个 PHP 进程,为 Web 服务器(如 Nginx)提供请求处理能力。

  • 运行方式:以服务进程形式存在,接收来自 Nginx 的请求
  • 通信协议:使用 FastCGI 协议
  • 来源:已经成为 PHP 官方的一部分,由全球社区维护

FastCGI 协议简介

FastCGI 是一种高性能、跨平台的 Web 服务器与应用程序之间的通信协议。其核心优势在于:

  • 将应用服务器(如 PHP)与 Web 服务器(如 Nginx)解耦
  • 支持复用进程,避免频繁创建/销毁,提高性能
  • 支持分布式部署

Nginx 与 PHP-FPM 的通信机制

Nginx 与 PHP-FPM 之间通过 Socket 通信(可以是 Unix Socket 或 TCP Socket)传递请求数据和响应。

为何使用 Socket 通信?

  • 跨主机部署(Nginx 和 PHP-FPM 可在不同机器)
  • 操作系统级别的进程间通信,性能高、稳定性好
  • 可配置并发连接数、进程池等优化策略