返回

快速了解:nginx下php-fpm相关错误信息集锦及对应解决方案

后端

PHP-FPM 报错的终极指南:解决 Nginx 下常见问题

PHP 工程师的噩梦:凌晨三点仍在解决 PHP-FPM 报错

作为一名 PHP 工程师,您是否经历过在深夜仍在与 PHP-FPM 报错作斗争?您是否感到快要被逼疯了?别担心,您并不孤单!在本篇攻略中,我们将深入探讨 Nginx 下 PHP-FPM 报错的常见原因和解决方法,让您从此不再熬夜!

PHP-FPM 报错:常见的罪魁祸首

在开始之前,让我们了解一下 PHP-FPM 报错的常见原因:

  • 服务器配置问题: 包括 PHP-FPM 和 Nginx 配置的不当。
  • 文件权限问题: PHP-FPM 需要对某些文件和目录具有适当的权限。
  • 代码错误: PHP 脚本中的语法或逻辑错误会导致 PHP-FPM 报错。

解决 PHP-FPM 报错的必备攻略

  1. 检查错误日志: 错误日志通常包含有关报错原因的详细信息。检查 /var/log/nginx/error.log/var/log/php-fpm/error.log
  2. 检查 PHP-FPM 配置:/etc/php-fpm.conf 中,确保以下设置正确:
    • pm:进程管理器类型,建议使用 ondemanddynamic
    • pm.max_children:最大并发子进程数。
    • pm.start_servers:启动时创建的子进程数。
  3. 检查 Nginx 配置:/etc/nginx/sites-available/default 中,确保以下设置正确:
    • server { ... } 块中设置了正确的 rootindex
    • location ~ \.php$ { ... } 块中指定了正确的 PHP 处理程序,如 fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
  4. 检查文件权限: 确保 PHP-FPM 对应用程序目录和文件具有适当的权限。在 Ubuntu 上,使用 chown -R www-data:www-data /var/www/html
  5. 检查 PHP 代码: 检查 PHP 脚本是否存在语法或逻辑错误。使用 PHP lint 工具(如 php -l)可以帮助您找到潜在的问题。

常见 PHP-FPM 报错及其解决方法

以下是一些常见的 PHP-FPM 报错及其解决方法:

  • [error] FastCGI sent in stderr: "Primary script unknown"
    • 解决方案:确保脚本存在且具有可执行权限。
  • [error] FastCGI sent in stderr: "Unable to open primary script (wrapper: php-cgi-wrapper) (reason: No such file or directory)
    • 解决方案:检查 PHP-FPM 是否使用正确的 PHP 可执行文件路径。
  • [error] FastCGI sent in stderr: "PHP message: PHP Fatal error: Call to undefined function..."
    • 解决方案:确保在 PHP 代码中使用的是正确的函数名称。
  • [error] FastCGI sent in stderr: "PHP message: PHP Fatal error: Class '...' not found in Unknown on line 0"
    • 解决方案:确保在 PHP 代码中使用的是正确的类名。
  • 502 Bad Gateway
    • 解决方案:检查 PHP-FPM 是否正在运行,并根据需要重新启动它。
  • 503 Service Unavailable
    • 解决方案:检查 PHP-FPM 是否已安装并启用。
  • 403 Forbidden
    • 解决方案:检查应用程序目录和文件是否具有适当的权限。
  • 404 Not Found
    • 解决方案:检查请求的 URL 是否正确,并且文件或目录是否存在。

结论

通过遵循本指南中的步骤,您应该能够有效地解决 PHP-FPM 报错,从而为您的 PHP 应用程序提供顺畅的运行环境。请记住,仔细检查错误日志、检查配置设置和测试您的代码至关重要。

常见问题解答

  1. 如何查看 PHP-FPM 错误日志?
    • 在 Ubuntu 上,使用 tail -f /var/log/php-fpm/error.log
  2. PHP-FPM 中 pm.max_children 的最佳设置是什么?
    • 这取决于您的应用程序和服务器的负载。建议从一个较小的数字开始,然后根据需要增加。
  3. 如何强制 PHP-FPM 重新加载配置?
    • 在 Ubuntu 上,使用 service php7.4-fpm reload(将 php7.4 替换为您安装的 PHP 版本)。
  4. 为什么我收到 "403 Forbidden" 错误?
    • 检查应用程序目录和文件是否属于 www-data 用户组。
  5. 如何启用 PHP-FPM 调试日志?
    • /etc/php-fpm.conf 中,将 error_log 设置为 /var/log/php-fpm/error.log,并将 log_level 设置为 debug