FrankenPHP 支持 Caddy 配置热重载,无需重启进程即可平滑生效;执行 caddy reload 后,静态资源、PHP 请求、HTTPS 和 HTTP/3 流量持续服务,日志显示“PHP server reloaded successfully”即表示成功。

FrankenPHP 的 Caddy 配置文件改动后,**无需重启进程即可重载生效**,这是 Caddy 内置的核心能力,FrankenPHP 完全继承。只要配置语法正确,重载过程是零中断、平滑的——静态资源、PHP 请求、HTTPS 连接、HTTP/3 流量全部持续服务,用户无感知。
直接执行重载命令
Caddy 提供了原生命令行工具 caddy reload,FrankenPHP 二进制中已包含该功能。在项目根目录(即 Caddyfile 所在位置)运行:
-
caddy reload—— 最常用方式,自动查找当前目录的 Caddyfile 并热更新 -
caddy reload --config ./Caddyfile—— 显式指定配置路径(适合多站点或非默认路径) -
caddy reload --addr :443—— 指定监听地址(当服务绑定多个端口时可选)
确认重载是否成功
命令执行后会输出类似信息:
2026/10/04 16:05:22.124 INFO http.handlers.php_server PHP server reloaded successfully
关键提示是 “PHP server reloaded successfully”,说明 FrankenPHP 的 PHP 运行时模块也已完成热切换。此时新路由、新压缩规则、新 header 设置等立即生效。
立即学习“PHP免费学习笔记(深入)”;
常见注意事项
- 语法必须合法:Caddyfile 有严格格式(如缩进、大括号位置),错误会导致重载失败并回滚到旧配置,日志里会明确报错,不会中断服务
-
环境变量不自动刷新:如果 Caddyfile 中用
{env.SOME_VAR}引用环境变量,修改环境变量后需手动 reload;但修改 Caddyfile 本身内容(如php_server参数)reload 即可 -
Docker 环境下需进容器执行:若用
dunglas/frankenphp镜像,先docker exec -it frankenphp caddy reload - worker 模式不受影响:已常驻的 PHP worker 进程不会被杀掉,新请求按新配置路由,旧连接继续完成,无请求丢失
自动化建议(可选)
开发中可配合文件监听实现自动重载:
- 用
caddy watch(FrankenPHP v1.2+ 支持):启动时加--watch参数,Caddyfile 变更自动触发 reload - Linux 下用
inotifywait脚本监听 + reload 命令组合 - CI/CD 部署时,在推送新 Caddyfile 后固定执行一次
caddy reload



















