Symfony项目Dev环境正常,Prod环境报404/500,该排查什么?
排查Symfony 5.4生产环境404/500问题的方向
Web服务器重写规则检查
确认Apache/Nginx的URL重写配置是否正确:- Apache:确保
mod_rewrite已启用,站点配置中包含AllowOverride All,且项目根目录的.htaccess文件存在并生效 - Nginx:确认配置文件中存在将所有请求转发到
public/index.php的规则,例如:location / { try_files $uri $uri/ /index.php$is_args$args; }
修改配置后需重启Web服务器生效。
- Apache:确保
文件权限验证
确保var/cache/prod、var/log目录的所有者为Web服务器运行用户(通常是www-data),执行以下命令修复权限:sudo chown -R www-data:www-data var/cache var/log sudo chmod -R 755 var/cache var/log注意:避免用
root用户执行cache:clear,否则生成的缓存文件权限会导致Web服务器无法读取。生产环境日志配置排查
- 检查
config/packages/prod/monolog.yaml的日志路径配置,确保路径正确且www-data有写入权限,例如:monolog: handlers: main: path: "%kernel.logs_dir%/%kernel.environment%.log" - 查看PHP-FPM的错误日志,Ubuntu下通常路径为
/var/log/php<版本>-fpm.log(如/var/log/php8.1-fpm.log),这里可能记录PHP层面的错误。 - 临时开启生产环境错误显示(仅用于排查,完成后关闭):编辑
public/index.php,在$kernel = new Kernel(...);前添加:error_reporting(E_ALL); ini_set('display_errors', 1);
- 检查
特定路由500问题定位
- 检查该路由对应的控制器代码,是否依赖仅在
dev环境存在的服务、配置或函数(如dump()、var_dump()) - 确认
.env.prod中是否缺少该路由所需的环境变量(如数据库连接、第三方服务密钥等) - 执行
bin/console cache:clear --env=prod --no-warmup,然后手动运行bin/console cache:warmup --env=prod,确保缓存预热完整。
- 检查该路由对应的控制器代码,是否依赖仅在
Web服务器访问/错误日志分析
查看Apache或Nginx的日志文件:- Apache:
/var/log/apache2/access.log、/var/log/apache2/error.log - Nginx:
/var/log/nginx/access.log、/var/log/nginx/error.log
日志中会记录404请求的具体路径、500错误的触发栈信息,帮助定位问题。
- Apache:
路由缓存一致性检查
手动删除var/cache/prod目录,然后重新生成缓存:rm -rf var/cache/prod bin/console cache:clear --env=prod避免缓存文件残留导致的路由匹配异常。
内容的提问来源于stack exchange,提问作者Robert Chapin
相关产品推荐
相关产品推荐

