Hello! 欢迎来到小浪云!


错误解决:Nginx php-fpm 502 bad gateways


avatar
小浪云 2025-01-28 10

nginxphp-fpm的502 bad gateway错误及解决方案

错误解决:Nginx php-fpm 502 bad gateways

本文针对Ubuntu 16.04.2系统上出现的Nginx 502 Bad gateway错误进行分析和解决,该错误源于nginxphp-FPM(版本:php-fpm/5.6)的交互问题。

错误现象:

Nginx错误日志显示请求失败,提示来自上游的头部信息丢失。 PHP-FPM错误日志显示子进程数量达到最大值(pm.max_children 设置为5)。 重启PHP-FPM后,网站恢复正常。

立即学习PHP免费学习笔记(深入)”;

错误原因分析:

PHP-FPM的子进程数量已达到配置文件中设定的最大值,导致无法处理新的请求,从而引发Nginx的502错误。

解决方案:

问题在于PHP-FPM的进程管理配置。需要调整/etc/php/5.6/fpm/php-fpm.conf 或 /etc/php/5.6/fpm/pool.d/www.conf 文件中的pm参数及其相关设置。 (5.6版本通常在www.conf中配置)。

配置文件参数详解:

关键参数包括:

  • pm: 进程管理模式,可选值 Static (静态) 或 dynamic (动态)。
  • pm.max_children: 静态模式下PHP-FPM子进程的最大数量;动态模式下,表示最大子进程数。
  • pm.start_servers: 动态模式下PHP-FPM启动时的子进程数量。
  • pm.min_spare_servers: 动态模式下PHP-FPM保持的最小空闲子进程数量。
  • pm.max_spare_servers: 动态模式下PHP-FPM保持的最大空闲子进程数量。

pm模式区别:

  • static: 固定数量的PHP-FPM进程,仅pm.max_children生效。
  • dynamic: 根据系统负载动态调整PHP-FPM进程数量,pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers 均生效。

进程数量计算:

要确定合适的进程数量,可以使用memory_get_peak_usage(true)函数获取单个请求的峰值内存使用量,并考虑PHP-FPM进程本身的内存消耗,从而估算每个进程所需的内存。 根据服务器的可用内存,计算可以同时运行的进程数量。

通过调整以上参数,例如增加pm.max_children 或优化pm.start_servers, pm.min_spare_servers, pm.max_spare_servers的值,可以有效解决PHP-FPM进程不足的问题,避免502错误的再次发生。 修改配置文件后,记得重启PHP-FPM服务使配置生效。

相关阅读