Laravel 在 CentOS 的系统性排查路径
一 快速定位与日志优先
- 查看 Laravel 应用日志:在项目根目录执行 tail -f storage/logs/laravel.log,优先定位异常堆栈与报错行号。必要时提高日志级别,在 .env 设置 LOG_LEVEL=debug,或在 config/logging.php 使用 daily 通道并设置保留天数。
- 查看 PHP-FPM 与 Web 服务日志:PHP-FPM 常见路径为 /var/log/php-fpm.log(或带版本号如 php7.x-fpm.log);Nginx 错误日志通常在 /var/log/nginx/error.log,Apache 错误日志在 /var/log/httpd/error_log。
- 实时跟踪与检索:使用 tail -fn 50 实时查看日志;用 grep 过滤关键字(如 “error”“SQLSTATE”“file_put_contents”)快速定位问题。
- 注意:生产环境请勿长期开启 APP_DEBUG=true,避免泄露敏感信息。
二 环境与依赖检查
- PHP 版本与扩展:运行 php -v 确认版本满足项目要求;常见必备扩展包括 php-common、php-cli、php-fpm、php-json、php-pdo、php-mysqlnd、php-zip、php-gd、php-mbstring、php-curl、php-xml、php-bcmath。
- Composer 与依赖:确保已安装 Composer,在项目根目录执行 composer install;若安装或更新失败,可先执行 composer clearcache 再重试。
- 应用密钥与配置:确认 .env 存在且包含 APP_KEY,缺失则执行 php artisan key:generate;数据库连接参数正确后再进行迁移。
- 缓存与配置:部署或环境变更后执行 php artisan config:clear、php artisan cache:clear、php artisan route:clear、php artisan view:clear。
三 文件权限与 SELinux
- 目录权限与属主:确保 storage 与 bootstrap/cache 可写,常见做法是将属主设为 Web 服务运行用户(如 nginx:nginx 或 www-data:www-data),并设置合理权限(如 755 对目录,文件按最小权限设置)。
- SELinux:若启用 SELinux,可能因策略导致写入或访问被拒。可临时执行 sudo setenforce 0 验证;若确认是 SELinux 引起,建议通过 semanage/fcontext 设置正确的文件上下文,而非长期关闭 SELinux(生产环境不建议直接 disabled)。
四 Web 服务器与路由配置
- 根目录与重写规则:确保 Web 服务器根目录指向 public;Nginx 使用 try_files $uri $uri/ /index.php?$query_string;;Apache 需启用 mod_rewrite 并在虚拟主机配置 AllowOverride All。
- PHP-FPM 通信:确认 fastcgi_pass 与进程通信方式一致(如 unix:/var/run/php-fpm/php-fpm.sock 或 127.0.0.1:9000),并设置正确的 SCRIPT_FILENAME。
- 常见症状与处理:出现 404 多为重写未生效或 public/.htaccess 缺失;出现 500 多查看 PHP-FPM 与应用日志;出现 “No input file specified” 常因 SCRIPT_FILENAME 错误或 public/index.php 不可读。
五 数据库与常见故障处理
- 连接与迁移:核对 .env 中 DB_CONNECTION、DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD;确保数据库服务运行且用户权限正确;必要时执行 php artisan migrate。
- 常见报错速查:
- “SQLSTATE[HY000] [2002] Connection refused/timed out”:检查数据库是否运行、主机与端口、云数据库安全组/防火墙。
- “Access denied for user”:核对用户名、密码与授权主机。
- “The only supported ciphers are AES-128-CBC and AES-256-CBC” 或 “The MAC is invalid”:.env 中 APP_KEY 缺失或不一致,执行 php artisan key:generate 并重启 FPM/Web。
- “Class ‘PDO’ not found” 或 “Call to undefined function curl_init()”:安装对应 PHP 扩展 并重启 php-fpm。
- “Allowed memory size exhausted”:在 php.ini 调高 memory_limit(如 256M),或命令行临时执行 php -d memory_limit=256M …。
- “Permission denied” 写入 storage/logs 或 bootstrap/cache:修正目录属主与权限,或排查 SELinux/防火墙。