必须打通nginx→php-fpm→laravel三层日志路径,否则502错误或空白页时无法定位根本原因;需启用php-fpm error_log与slowlog、配置php error_log并关闭display_errors,再通过重启服务和测试验证三类日志同步生成。

让Laravel在生产环境能稳定记录PHP-FPM层面的错误日志,必须打通Nginx→PHP-FPM→Laravel三层日志路径,否则502错误或空白页时连根本原因都查不到。
确认PHP-FPM错误日志开关与路径
编辑PHP-FPM主配置文件(通常为/etc/php-fpm.d/www.conf),找到error_log行并取消注释:
error_log = /var/log/php-fpm/www-error.log
这一步不能跳过——默认该行被注释,意味着PHP-FPM自身错误(如子进程崩溃、内存超限)完全不落盘。不设此项,【Nginx显示502却查不到任何PHP侧线索】。
确保/var/log/php-fpm/目录存在且PHP-FPM进程用户(通常是nginx或apache)有写权限:
sudo mkdir -p /var/log/php-fpm && sudo chown nginx:nginx /var/log/php-fpm
设置PHP-FPM慢日志捕获执行卡顿
在同一个www.conf中启用慢日志功能:
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 2s
这个配置会把所有执行超过2秒的PHP请求堆栈写入指定文件。对排查Laravel中ORM查询卡死、第三方API阻塞、循环未退出等问题极其关键。注意:timeout值必须带单位(s/m),写成2会被忽略。
别忘了给慢日志文件赋予写权限:
sudo touch /var/log/php-fpm/www-slow.log && sudo chown nginx:nginx /var/log/php-fpm/www-slow.log
将PHP错误导向系统日志或文件
方法一:直接输出到文件(推荐用于调试)
编辑/etc/php.ini,修改以下三项:
log_errors = On
error_log = /var/log/php/error.log
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
方法二:输出到syslog(适合已有ELK或Graylog体系)
把error_log改为:error_log = syslog,然后重启php-fpm。这样PHP的trigger_error()、未捕获异常等都会进入journald或/var/log/messages。
【务必关闭display_errors = Off】——生产环境若开启,错误信息会直接暴露在HTTP响应体里,构成严重安全风险。
验证PHP-FPM日志是否生效
第一步:重启服务使配置落地
sudo systemctl restart php-fpm
第二步:制造一个可触发的日志事件
在Laravel项目中临时加一行:error_log("PHP-FPM日志测试:" . date('Y-m-d H:i:s'), 3, "/var/log/php-fpm/test.log");,然后访问对应路由。
第三步:检查三类日志是否同步生成: ① /var/log/php-fpm/www-error.log(PHP-FPM自身错误) ② /var/log/php-fpm/www-slow.log(如有超时请求) ③ /var/log/php/error.log 或 /var/log/messages(PHP运行时错误)
第四步:用sudo tail -f实时监听任一文件,刷新页面看新日志是否即时追加。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











