生产环境必须关闭调试模式,即APP_ENV=prod且APP_DEBUG=0(仅认0/1),否则暴露堆栈、路径及环境变量;需验证php bin/console about输出、HTML无sfwdt脚本、/_profiler返回404,并移除WebProfilerBundle等开发Bundle,最后清空生产缓存。

新项目初始化时,调试模式默认是开启的(APP_DEBUG=1),这仅适用于开发环境。生产环境必须关闭调试模式,否则会暴露敏感路径、堆栈信息甚至环境变量,带来严重安全隐患。
确认当前环境是否为生产
检查项目根目录下的 .env 文件,关键两行必须同时满足:
-
APP_ENV=prod—— 表示当前是生产环境 -
APP_DEBUG=0—— 明确关闭调试功能(不能留空、不能写false或注释掉)
注意:APP_DEBUG 的值只认 0 或 1,其他字符串(如 off、false)会被 PHP 解析为 true,导致调试仍开启。
验证调试模式是否真正关闭
仅改 .env 不够,还需确保内核加载时生效:
- 执行
php bin/console about,确认输出中Environment为prod,且Debug显示no - 访问任意页面,检查 HTML 源码底部——
<script id="sfwdt"></script>必须完全消失 - 尝试访问
/_profiler或/_wdt,应返回 404 而非调试面板
额外加固:移除开发专用 Bundle
生产环境下,WebProfilerBundle、MakerBundle 等开发工具不应加载:
- 打开
config/bundles.php,确认这些 Bundle 在prod下为false或已删除对应行 - 例如:
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], - 运行
php bin/console cache:clear --env=prod强制重建生产缓存,避免旧配置残留
上线前必做检查项
部署前快速过一遍,避免遗漏:
-
.env中无APP_DEBUG=1或未注释的调试开关 -
APP_SECRET已更换为强随机字符串(不能用默认值) - 数据库连接串(
DATABASE_URL)不包含明文密码,或已通过系统环境变量注入 - 日志级别设为
error或notice(修改config/packages/prod/monolog.yaml)


















