博客 / Linux/ LNMP 环境 502 Bad Gateway 错误自动重启 PHP-FPM 脚本配置指南

LNMP 环境 502 Bad Gateway 错误自动重启 PHP-FPM 脚本配置指南

LNMP 环境 502 Bad Gateway 错误自动重启 PHP-FPM 脚本配置指南

问题背景

在 LNMP(Linux + Nginx + MySQL + PHP)环境中,网站偶尔会出现 "502 Bad Gateway" 错误。这通常是由于 PHP-FPM 进程池耗尽、进程崩溃或响应超时导致的。手动重启 PHP-FPM 服务可以临时解决问题,但更优的解决方案是配置一个自动监控和重启脚本。

自动监控重启脚本

以下是一个 Bash 脚本示例,它通过检查指定 URL 的 HTTP 状态码来判断服务是否正常。当检测到 502 错误时,脚本会自动重启 PHP-FPM 服务。

#!/bin/bash

# 请将以下网址替换为您需要监控的网站地址
CheckURL="https://your-website.com/"

# 使用 curl 获取 HTTP 状态码,设置超时时间为 10 秒
STATUS_CODE=$(curl -o /dev/null -m 10 --connect-timeout 10 -s -w "%{http_code}" "$CheckURL")

# 调试时可取消下一行的注释,以查看状态码
# echo "$CheckURL Status Code:t$STATUS_CODE"

if [ "$STATUS_CODE" = "502" ]; then
    # 检测到 502 错误,重启 PHP-FPM 服务
    # 根据您的系统,重启命令可能不同,常见的有:
    systemctl restart php-fpm  # Systemd 系统(推荐)
    # /etc/init.d/php-fpm restart  # SysVinit 系统
fi

脚本使用步骤

  1. 创建脚本文件:将上述脚本内容保存到服务器上,例如 /root/check_502.sh。请务必将脚本中的 https://your-website.com/ 替换为您实际要监控的网站 URL。
  2. 赋予执行权限:使用以下命令为脚本添加可执行权限。
    chmod +x /root/check_502.sh
  3. 测试脚本:可以手动执行一次脚本,确保没有语法错误,并且路径和命令正确。
    bash /root/check_502.sh

配置定时任务 (Cron)

为了让脚本定期自动执行,需要将其添加到系统的定时任务中。

  1. 编辑当前用户的定时任务
    crontab -e
  2. 添加定时任务规则:在打开的编辑器中,添加以下一行。这表示每 5 分钟执行一次检查脚本。
    */5 * * * * /bin/bash /root/check_502.sh > /dev/null 2>&1

    说明> /dev/null 2>&1 会将脚本的所有输出(包括错误信息)重定向到空设备,避免 Cron 发送不必要的邮件通知。如果您需要记录日志用于排查,可以将其修改为 >> /var/log/check_502.log 2>&1

  3. 重启 Cron 服务(可选):通常添加任务后会自动生效。如果您的系统需要,可以使用以下命令重启 cron 服务。
    # 对于 Systemd 系统
    systemctl restart crond
    # 或
    systemctl restart cron
    
    # 对于 SysVinit 系统
    service crond restart

补充说明与注意事项

  • LNMP 一键安装包:如果您使用的是军哥的 LNMP 一键安装包,该包已内置了一个功能类似的脚本,路径通常为 /root/lnmp1.x/tools/check502.sh(请将 1.x 替换为您的实际版本号)。您可以直接使用并修改该脚本,无需从头创建。
  • 服务重启命令:脚本中的重启命令应根据您的 Linux 发行版和初始化系统进行调整。现代 Linux 发行版(如 CentOS 7+/Ubuntu 16.04+)通常使用 systemctl restart php-fpm。较旧的系统可能使用 /etc/init.d/php-fpm restartservice php-fpm restart。请使用 systemctl status php-fpmps aux | grep php-fpm 来确认服务名称。
  • 根本原因排查:自动重启脚本是治标不治本的应急措施。频繁出现 502 错误通常表明服务器存在更深层次的问题,例如:
    • PHP-FPM pm.max_children 等进程池配置不足。
    • PHP 脚本执行超时(max_execution_time)。
    • 数据库连接缓慢或失败。
    • 服务器内存或 CPU 资源不足。

    建议在配置此脚本的同时,检查 PHP-FPM 和 Nginx 的错误日志(通常位于 /usr/local/php/var/log//usr/local/nginx/logs/),以定位并解决根本原因。

  • 脚本安全:请确保脚本存放于安全目录(如 /root//usr/local/bin/),并限制其权限,避免被未授权用户读取或修改。

发表评论

您的邮箱不会公开。必填项已用 * 标注。