You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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服务器生效。

  • 文件权限验证
    确保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服务器无法读取。

  • 生产环境日志配置排查

    1. 检查config/packages/prod/monolog.yaml的日志路径配置,确保路径正确且www-data有写入权限,例如:
      monolog:
          handlers:
              main:
                  path: "%kernel.logs_dir%/%kernel.environment%.log"
      
    2. 查看PHP-FPM的错误日志,Ubuntu下通常路径为/var/log/php<版本>-fpm.log(如/var/log/php8.1-fpm.log),这里可能记录PHP层面的错误。
    3. 临时开启生产环境错误显示(仅用于排查,完成后关闭):编辑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错误的触发栈信息,帮助定位问题。
  • 路由缓存一致性检查
    手动删除var/cache/prod目录,然后重新生成缓存:

    rm -rf var/cache/prod
    bin/console cache:clear --env=prod
    

    避免缓存文件残留导致的路由匹配异常。

内容的提问来源于stack exchange,提问作者Robert Chapin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:02:46