Laravel在Linux上运行不稳定的排查与加固
一 快速定位与日志
- 查看应用日志:第一时间打开 storage/logs/laravel.log,用命令持续跟踪异常堆栈与重复报错关键词。
- 打开调试模式:在 .env 将 APP_DEBUG=true,复现问题以获取更详细的错误页面(上线前务必改回 false)。
- 检查 PHP-FPM 错误:同时查看 /var/log/php-fpm.log 或 /var/log/php7.x-fpm.log,很多“空白页/502”由 PHP 致命错误或进程崩溃导致。
- Web 服务错误:检查 Nginx/Apache 的错误日志(如 /var/log/nginx/error.log),定位路由、重写、权限、FastCGI 等问题。
- 生产环境建议:保持 APP_DEBUG=false,避免敏感信息泄露,同时依赖日志与监控定位问题。
二 环境与权限修复
- PHP 与扩展:确认 PHP 版本满足 Laravel 要求(≥7.2,推荐 ≥8.0),并启用必要扩展:BCMath、Ctype、JSON、Mbstring、OpenSSL、PDO、Tokenizer、XML、GD、Zip、MySQLnd 等。
- Composer 依赖:执行 composer install,确保 vendor/ 完整;遇到内存不足可临时提高 memory_limit(如 256M)。
- 目录权限:确保 storage 与 bootstrap/cache 可写,常见做法:
- Ubuntu/Debian:将属主设为 www-data,权限 775;
- CentOS/RHEL:将属主设为 nginx(或 apache),权限 775。
- SELinux(仅 CentOS/RHEL):若访问被拒或偶发异常,可先临时 setenforce 0 验证,再按需配置 SELinux 布尔值/策略,避免直接长期关闭。
- 环境变量与密钥:核对 .env 的 DB_、APP_URL、缓存/队列驱动等;必要时执行 php artisan config:clear 与 php artisan key:generate。
三 Web 服务器与 PHP-FPM 配置
- 根目录与重写:将站点根目录指向 public,Nginx 使用 try_files $uri $uri/ /index.php?$query_string; 实现 Laravel 路由。
- FastCGI 关键参数:确保 SCRIPT_FILENAME 指向实际脚本(如 $realpath_root$fastcgi_script_name),并按本机实际路径配置 fastcgi_pass(如 unix:/var/run/php/php8.0-fpm.sock 或 127.0.0.1:9000)。
- 安全头与静态资源:配置 X-Frame-Options、X-XSS-Protection、X-Content-Type-Options 等安全头,屏蔽对敏感目录的访问。
- 重载与语法检查:修改后执行 nginx -t 校验配置,再 systemctl reload nginx/php-fpm 生效。
- Apache 要点:启用 mod_rewrite,并保证 public/.htaccess 生效。
四 性能与稳定性优化
- 配置与路由缓存:生产环境执行 php artisan config:cache、php artisan route:cache;视图可用 php artisan view:compile,显著降低请求开销。
- 缓存驱动:将 CACHE_DRIVER=redis(或 memcached),提升配置/路由/数据缓存命中率。
- 队列与异步:将耗时任务放入队列(如 QUEUE_CONNECTION=redis),用 php artisan queue:work --tries=3 --timeout=90 常驻处理,避免阻塞请求。
- 监控与告警:接入 Laravel Debugbar(开发)、New Relic、Datadog 等,持续观测异常、慢查询与内存/队列积压。
五 一键健康检查清单
| 检查项 |
期望结果 |
快速命令/路径 |
| PHP 版本 |
≥7.2(推荐 ≥8.0) |
php -v |
| 扩展 |
BCMath、Ctype、JSON、Mbstring、OpenSSL、PDO、Tokenizer、XML、GD、Zip、MySQLnd |
php -m |
| 依赖 |
vendor 完整无缺 |
composer install |
| 目录权限 |
storage、bootstrap/cache 可写 |
chown -R www-data:www-data /path && chmod -R 775 storage bootstrap/cache |
| 日志 |
有持续输出且可读 |
tail -f storage/logs/laravel.log |
| PHP-FPM 日志 |
无致命错误/崩溃 |
tail -f /var/log/php-fpm.log |
| Nginx 配置 |
根目录指向 public,try_files 正确,语法通过 |
nginx -t;cat /etc/nginx/sites-available/your-site |
| 站点连通 |
返回正常页面或 Laravel 路由响应 |
curl -I https://your-domain |
| 缓存与队列 |
已启用并运行 |
php artisan config:cache;php artisan queue:work --tries=3 --timeout=90 |