WordPress 集成
本文引用的文件
- examples/wordpress/README.md
- examples/wordpress/vhttpd.toml
- examples/wordpress/vhttpd-v2.toml
- examples/wordpress/vhttpd-split.toml
- examples/wordpress/vhttpd-cgi.toml
- examples/wordpress/app.php
- examples/wordpress/wp-load.php
- examples/wordpress/upload-events.mts
- php/package/README.md
- php/package/wordpress/vhttpd-db.php
- docs/CONFIGURATION_MODEL_V2.md
目录
- 简介
- 项目结构
- 核心组件
- 架构总览
- 详细组件分析
- 依赖关系分析
- 性能与缓存策略
- 安全加固与访问控制
- 多站点与 CDN 集成
- 上传与事件处理
- 数据库连接优化
- 主题与插件兼容性
- 重写规则与生命周期钩子
- 运维指南:监控、备份与故障诊断
- 结论
简介
本文件面向在 VHTTPD 中部署 WordPress 的工程师与运维人员,提供从配置到运行、从静态资源到动态路由、从数据库与对象缓存到上传事件处理的完整实践。文档基于仓库内示例与官方说明,覆盖 v1/v2 两套配置模型、PHP 长驻 worker 与 php-cgi 双池分流、REST API 重写、WooCommerce 兼容路径、响应缓存旁路策略、以及上传完成回调等关键能力。
项目结构
WordPress 相关示例位于 examples/wordpress,包含多种运行模式与配置样例: - v1 配置(executors/routes):vhttpd.toml - v2 配置(listeners/resources/engines/adapters/pipelines):vhttpd-v2.toml - 拆分路由演示:vhttpd-split.toml、vhttpd-cgi.toml - PHP 应用入口与桥接逻辑:app.php、wp-load.php - 上传事件处理器(vjsx):upload-events.mts - 配套说明:README.md - 运行时包说明与 WP DB/Object Cache 桥接:php/package/README.md、php/package/wordpress/vhttpd-db.php
graph TB
subgraph "VHTTPD 进程"
L["监听器<br/>listener:web"]
P1["管道: 静态资源"]
P2["管道: REST API"]
P3["管道: 前台页面"]
P4["管道: 后台/兼容入口"]
UPL["管道: 上传"]
EVT["管道: 上传完成事件"]
end
subgraph "执行引擎"
E1["php-worker (长驻)"]
E2["php-cgi (兼容)"]
E3["vjsx (上传事件)"]
end
subgraph "外部资源"
DB["MySQL 数据库"]
CACHE["对象缓存/会话存储"]
FS["文件系统(站点根/上传目录)"]
end
L --> P1 --> FS
L --> P2 --> E2
L --> P3 --> E1
L --> P4 --> E2
L --> UPL --> FS
UPL --> EVT --> E3
E1 --- DB
E1 --- CACHE
E2 --- DB
E2 --- CACHE
图示来源 - examples/wordpress/vhttpd-v2.toml:1-434 - examples/wordpress/vhttpd.toml:1-290
章节来源 - examples/wordpress/README.md:1-46 - examples/wordpress/vhttpd-v2.toml:1-434 - examples/wordpress/vhttpd.toml:1-290
核心组件
- 应用入口 app.php:负责 WordPress 安装态检测、静态资源直出、WP 启动与模板渲染、重定向拦截与错误封装。
- 执行器与适配器:php-worker 用于高性能前台;php-cgi 用于管理后台与兼容入口;static 用于静态资源;upload 用于大文件上传;vjsx 用于上传完成事件处理。
- 资源与存储:MySQL 数据库、对象缓存(session-store)、站点根与独立上传目录。
- 路由与管道:按路径、方法、查询参数进行精细化分流,并附加缓存策略与安全策略。
章节来源 - examples/wordpress/app.php:1-252 - examples/wordpress/vhttpd-v2.toml:1-434 - examples/wordpress/vhttpd.toml:1-290
架构总览
下图展示了 v2 配置下的请求流转:监听器接收 HTTP,管道匹配后选择静态直出、php-cgi 或 php-worker,上传走 upload 适配器并在完成后触发 vjsx 事件处理。
sequenceDiagram
participant C as "客户端"
participant L as "监听器 web"
participant R as "路由/管道"
participant S as "静态适配器"
participant CGI as "php-cgi 适配器"
participant W as "php-worker 适配器"
participant U as "上传适配器"
participant J as "vjsx 上传事件"
participant DB as "MySQL"
participant OC as "对象缓存"
C->>L : "GET /wp-json/..."
L->>R : "匹配 REST 管道"
R->>CGI : "转发至 php-cgi"
CGI->>DB : "读写数据库"
CGI->>OC : "读取/写入对象缓存"
CGI-->>C : "JSON 响应"
C->>L : "GET / (前台)"
L->>R : "匹配前台管道"
R->>W : "转发至 php-worker"
W->>DB : "查询文章/选项"
W->>OC : "对象缓存"
W-->>C : "HTML 响应"
C->>L : "POST /vhttpd/uploads"
L->>R : "匹配上传管道"
R->>U : "持久化到上传目录"
U-->>R : "触发 upload.completed 事件"
R->>J : "调用 vjsx 处理器"
J-->>C : "202 Accepted"
图示来源 - examples/wordpress/vhttpd-v2.toml:196-434 - examples/wordpress/upload-events.mts:1-25
详细组件分析
应用入口 app.php
- 安装态检测:若未检测到 wp-config.php,返回框架元信息或重定向至安装流程。
- 静态资源直达:对 wp-content、wp-includes、favicon.ico、robots.txt 等直接读取本地文件并以合适 MIME 类型返回。
- 常驻加载:已安装且非物理 PHP 入口时,初始化 WordPress 环境并交由模板渲染。
- 重定向拦截:自定义 wp_redirect 抛出异常,统一转换为响应头 Location 与状态码。
- 错误封装:捕获异常并输出结构化错误信息。
flowchart TD
Start(["进入 app.php"]) --> CheckInstall["检测是否已安装(wp-config.php)"]
CheckInstall --> |否| MetaCheck{"是否请求 /meta ?"}
MetaCheck --> |是| ReturnMeta["返回 installed:false 元信息"]
MetaCheck --> |否| RedirectSetup["重定向到安装向导"]
CheckInstall --> |是| StaticMatch["匹配静态资源路径?"]
StaticMatch --> |是| ServeStatic["直接读取文件并返回"]
StaticMatch --> |否| PhpEntry{"是否为 .php 物理入口?"}
PhpEntry --> |是| DenyDirect["拒绝直接访问,提示使用 CGI/compat"]
PhpEntry --> |否| BootstrapWP["初始化 WP 运行时"]
BootstrapWP --> Render["模板渲染并返回 HTML"]
Render --> End(["结束"])
ReturnMeta --> End
RedirectSetup --> End
ServeStatic --> End
DenyDirect --> End
图示来源 - examples/wordpress/app.php:1-252
章节来源 - examples/wordpress/app.php:1-252
v1 配置(executors + routes)
- 定义两个 PHP 执行器:php(长驻)与 php-cgi(兼容),分别设置 socket、队列容量与超时。
- 通过 deny_php 与 compat_php 限制敏感 PHP 文件与需要兼容模式的入口。
- 路由规则按顺序匹配:静态后缀直出、wp-content/wp-includes 目录直出、REST API 走 php-cgi、WooCommerce 账户页与 AJAX 走 php-cgi、前台 GET 走 php-worker 并启用短 TTL 缓存与 Cookie 旁路。
章节来源 - examples/wordpress/vhttpd.toml:1-290
v2 配置(listeners/resources/engines/adapters/pipelines)
- 监听器:HTTP/TLS 监听端口。
- 资源:MySQL、对象缓存(session-store)、站点根与上传目录。
- 引擎:php-worker 与 php-cgi 双引擎,注入资源与环境变量。
- 适配器:http-handler(php-worker/php-cgi)、static、upload、fixed-response。
- 管道:按路径与方法精细分流,组合策略(缓存、限流、响应头)。
- 转换:wp-json 重写为 index.php?rest_route=...;上传完成事件调用 vjsx 处理器。
章节来源 - examples/wordpress/vhttpd-v2.toml:1-434 - docs/CONFIGURATION_MODEL_V2.md:620-754
拆分路由与 CGI 模式
- vhttpd-split.toml:演示将不同路径分发到 static、php-cgi 等不同执行器。
- vhttpd-cgi.toml:仅使用 php-cgi 执行器的最小配置。
章节来源 - examples/wordpress/vhttpd-split.toml:1-56 - examples/wordpress/vhttpd-cgi.toml:1-18
依赖关系分析
- 应用入口依赖 WordPress 运行时与 vhttpd 提供的 DB/Cache 桥接。
- v2 配置将资源(db/cache/storage)注入到引擎,并通过适配器与管道组织请求流。
- 上传事件由 vjsx 处理器异步处理,避免阻塞主请求链路。
classDiagram
class App {
+normalizeRequest()
+bootstrapIfInstalled()
+prepareEnvironment()
+bootstrap()
+resetRequestRuntime()
+finalizeResponse()
}
class Engine_PHPWorker
class Engine_PhpCgi
class Adapter_Static
class Adapter_Upload
class Adapter_HttpHandler
class Transform_Rewrite
class Event_VJSX
App --> Engine_PHPWorker : "前台/REST(部分)"
App --> Engine_PhpCgi : "后台/兼容入口"
Adapter_Static --> Engine_PHPWorker : "静态直出"
Adapter_Upload --> Event_VJSX : "上传完成事件"
Transform_Rewrite --> Engine_PhpCgi : "REST 重写"
图示来源 - examples/wordpress/app.php:1-252 - examples/wordpress/vhttpd-v2.toml:1-434 - examples/wordpress/upload-events.mts:1-25
性能与缓存策略
- 静态资源:按扩展名与目录直出,设置 immutable 或短期缓存。
- 前台页面:匿名请求启用短 TTL 缓存,带特定 Cookie 自动旁路。
- WooCommerce:购物车/结账/账户页强制 private,no-store,避免缓存污染。
- REST API:通过 php-cgi 执行,确保长输出与流式场景稳定。
章节来源 - examples/wordpress/vhttpd.toml:120-290 - examples/wordpress/vhttpd-v2.toml:147-174
安全加固与访问控制
- 禁止直接访问敏感 PHP 文件(如 wp-config.php、wp-load.php、wp-settings.php、wp-blog-header.php)。
- 禁止上传目录、wp-includes、wp-admin/includes 下任意 .php 被直接访问。
- 为 REST OPTIONS 与上传响应添加 nosniff 等安全头。
- 通过固定响应适配器返回 403 阻断危险路径。
章节来源 - examples/wordpress/vhttpd.toml:45-66 - examples/wordpress/vhttpd-v2.toml:243-264
多站点与 CDN 集成
- 多站点:在同一 vhttpd 实例上通过多个 listeners 与 pipelines 区分站点域名与根目录,复用 engines 与 resources。
- CDN:为静态资源设置 immutable 缓存,结合版本化文件名;对动态页面使用 short TTL 与 Cookie 旁路策略,保证 CDN 边缘缓存命中同时避免用户态数据污染。
章节来源 - examples/wordpress/vhttpd-v2.toml:209-240 - examples/wordpress/vhttpd.toml:132-161
上传与事件处理
- 上传接口:/vhttpd/uploads 支持 POST/PUT,最大体积极大,落盘到独立目录。
- 完成事件:上传完成后触发 upload.completed 事件,由 vjsx 处理器记录日志并返回 202。
- 安全头:nosniff 防止 MIME 嗅探。
章节来源 - examples/wordpress/vhttpd.toml:122-131 - examples/wordpress/vhttpd-v2.toml:196-208 - examples/wordpress/upload-events.mts:1-25
数据库连接优化
- 连接池:通过 MySQL 资源定义 pool_size、idle_ping_ms、init_sql(utf8mb4、sql_mode 调整)。
- 桥接:在 wp-config.php 中引入 vhttpd-db.php,使 $wpdb 走 vhttpd 的 DB 协议与连接池。
- 环境变量:VHTTPD_DB_SOCKET、VHTTPD_DB_POOL、VHTTPD_DB_TIMEOUT_MS 在引擎 env 中配置。
章节来源 - examples/wordpress/vhttpd-v2.toml:20-33 - php/package/README.md:570-586 - php/package/wordpress/vhttpd-db.php:1-9
主题与插件兼容性
- 前台长驻 worker 适合大多数主题与插件;涉及长输出、流式响应或复杂表单的场景建议走 php-cgi。
- WooCommerce 的购物车/结账/账户页与 AJAX 明确走 php-cgi,避免状态不一致。
- 对于直接访问 .php 入口的请求,app.php 会拒绝并提示使用兼容执行器。
章节来源 - examples/wordpress/app.php:119-140 - examples/wordpress/vhttpd.toml:186-200 - examples/wordpress/vhttpd-v2.toml:329-337
重写规则与生命周期钩子
- REST API 重写:/wp-json/* 经 transform 重写为 /index.php?rest_route=$path_remainder。
- 生命周期钩子:app.php 中通过 prepareEnvironment/bootstrap/resetRequestRuntime 等阶段控制 WP 启动与请求隔离;wp_redirect 被拦截以统一重定向行为。
- 前端元信息:/meta 接口返回框架与站点基本信息,便于健康检查与调试。
章节来源 - examples/wordpress/vhttpd-v2.toml:185-190 - examples/wordpress/app.php:18-22 - examples/wordpress/app.php:148-162
运维指南:监控、备份与故障诊断
- 可观测性:v2 配置开启 event_log 输出 NDJSON 事件,便于集中采集与分析。
- 健康检查:访问 /meta 判断安装态与站点元信息。
- 故障定位:
- 未安装:/meta 返回 installed:false,其他动态请求提示 wp_config_missing。
- 直接访问 .php 入口:返回 direct_php_script_unsupported,需改用 php-cgi。
- 上传失败:检查上传目录权限与 max_body_bytes 策略。
- 备份恢复:
- 数据库:定期导出 MySQL 库,注意 utf8mb4 与 sql_mode 一致性。
- 文件:备份站点根与上传目录,保持对象缓存与 session-store 的幂等重建。
- 性能调优:
- 根据并发调整 php-worker 与 php-cgi 的 pool_size 与 queue_capacity。
- 合理设置前台页面 response_cache_ttl_ms 与 cache_control。
- 关注 idle_ping_ms 与 init_sql 对连接稳定性影响。
章节来源 - examples/wordpress/vhttpd-v2.toml:6-8 - examples/wordpress/app.php:91-117 - examples/wordpress/README.md:36-46
结论
通过在 VHTTPD 中采用 php-worker 与 php-cgi 双执行器、细粒度管道与策略、以及对象缓存与上传事件机制,可以在保留 WordPress 生态的同时获得现代运行时的高性能与可观测性。配合严格的安全策略与合理的缓存旁路,既能保障前台吞吐,又能确保后台与电商场景的正确性与一致性。