FrankenPHP生产环境需禁用调试功能:关闭hot_reload、设display_errors=Off、log_errors=On、error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT,并移除metrics/admin暴露端点。

FrankenPHP 默认在开发环境会启用调试相关功能,比如热重载(hot_reload)、详细错误报告、未捕获异常的堆栈追踪、以及部分指标采集等。这些对线上环境不仅无用,反而增加 CPU 和内存开销,还可能暴露敏感信息。关闭调试模式不是简单改一个开关,而是要从配置、PHP 运行时、Caddy 行为三个层面协同处理。
禁用热重载与开发专用特性
热重载(hot_reload)是 FrankenPHP 开发期的核心便利功能,但它会持续监听文件变更、触发重新加载逻辑,显著拖慢请求响应。生产环境必须关闭:
- 在 Caddyfile 中移除或注释掉
php { hot_reload }指令 - 若使用 YAML 配置(
/etc/frankenphp/frankenphp.yaml),确认features.hot_reload设为false - 避免在启动命令中加
--hot-reload或-r参数
关闭 PHP 级调试输出
即使 FrankenPHP 层面关闭了调试,底层 PHP 仍可能因配置不当泄露错误细节。需确保:
-
display_errors = Off(禁止向浏览器输出错误) -
log_errors = On(错误写入日志而非页面) -
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT(线上推荐值,不报弃用和严格警告) - 检查
php.ini路径是否被 FrankenPHP 正确加载(通过php.ini_path配置项确认)
停用非必要监控与管理端点
FrankenPHP 借助 Caddy 的 metrics 和 admin 功能提供可观测性,但线上若无需实时监控,应精简暴露面:
立即学习“PHP免费学习笔记(深入)”;
- 从 Caddyfile 全局块中移除
metrics指令,或将其限定在内网地址(如metrics 127.0.0.1:2019) - 禁用 admin 管理接口:删除或注释掉
{ admin ... }块;若保留,务必限制绑定地址(如admin 127.0.0.1:2019) - 避免在生产镜像中挂载调试卷(如
/var/log/frankenphp或源码映射)
验证是否生效
完成配置后,建议做三项快速检查:
- 访问站点触发一个语法错误,确认返回的是通用 500 页面,而非带堆栈的 PHP 错误页
- 执行
curl -v http://localhost:2019/metrics(若 admin 未禁用),确认返回 403 或连接拒绝 - 查看进程内存占用:
ps aux --sort=-%mem | head -5,对比开启/关闭 hot_reload 前后的常驻内存波动



















