frankenphp worker模式需在caddyfile中显式配置php_worker指令并指定绝对路径的worker.php入口,配合frankenphp run启动、stop-workers发布,不可依赖默认配置或reload。

不能靠默认配置自动启用,必须在 Caddyfile 中显式声明 worker 指令,并配合正确的入口文件和路径设置。FrankenPHP 1.2 的 worker 模式不是开箱即用的,它依赖 Caddy 主动拉起并管理 PHP worker 进程,而非由命令行单独启动。
必须写对 php_worker 指令
Caddyfile 中需在对应站点块内使用 php_worker(不是 php 或 php_server),且指定绝对路径的入口脚本:
- 路径必须是绝对路径,例如
/var/www/myapp/public/worker.php;相对路径如./public/worker.php会失败 - 指令块内可配置环境变量和 max_requests,推荐设为 5000 防止内存累积泄漏
- 示例配置:
route {
php_worker /var/www/myapp/public/worker.php {
env APP_ENV=prod
max_requests 5000
}
}
}
入口文件必须是 worker-aware 的
Symfony 项目请直接使用 public/worker.php(6.3+ 自带);旧版或 ThinkPHP、CodeIgniter 等需手动创建适配脚本:
- 不能复用
index.php,否则会出现 Class not found、请求卡死等问题 - 核心逻辑是外层一次性初始化 Kernel 或 App,内层用
frankenphp_handle_request()包裹请求处理 - 确保调用
$response->send()和框架对应的结束方法(如$app->http->end())
确认运行方式与发布流程
worker 模式只在 frankenphp run 下生效,frankenphp serve 不加载 worker:
- 启动时执行
frankenphp run(不是 serve),Caddyfile 必须位于当前工作目录 - 验证是否成功:查看日志是否有
Starting PHP worker pool with X workers,或控制器中打印getmypid(),连续请求 PID 相同即为常驻 - 发布新代码时,不能
caddy reload,必须执行frankenphp stop-workers触发滚动重启
环境变量辅助启用(可选但推荐)
除 Caddyfile 配置外,还可通过系统级环境变量增强可靠性:
- 在 Docker 中通过
environment: FRANKENPHP_WORKER=1设置 - 宝塔面板可在站点设置 → 环境变量中添加该键值对
- 注意:
FRANKENPHP_WORKER=1是环境变量,不是命令行参数,不要加--worker
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











