插件窝 干货文章 php+nginx服务发生500、502错误如何排查

php+nginx服务发生500、502错误如何排查

PHP 错误 Nginx FPM 987    来源:    2025-04-22

PHP + Nginx 服务 500/502 错误排查指南

当PHP+Nginx环境出现500(内部服务器错误)或502(网关错误)时,可以按照以下步骤进行排查:

一、查看错误日志

1. Nginx错误日志

tail -f /var/log/nginx/error.log
# 或根据你的配置路径
tail -f /usr/local/nginx/logs/error.log

2. PHP-FPM错误日志

tail -f /var/log/php-fpm.log
# 或
tail -f /var/log/php7.x-fpm.log

3. PHP错误日志

检查php.ini中的错误日志设置:

php -i | grep error_log

二、常见500错误原因及解决

  1. PHP脚本语法错误

    • 检查PHP代码是否有语法错误
    • 开启PHP错误显示: php ini_set('display_errors', 1); error_reporting(E_ALL);
  2. 文件权限问题

    chown -R www-data:www-data /path/to/webroot
    chmod -R 755 /path/to/webroot
    
  3. PHP内存不足

    • 修改php.ini: memory_limit = 256M
  4. PHP执行超时

    • 修改php.ini: max_execution_time = 300

三、常见502错误原因及解决

  1. PHP-FPM未运行或崩溃

    systemctl status php-fpm
    # 重启PHP-FPM
    systemctl restart php-fpm
    
  2. PHP-FPM配置问题

    • 检查/etc/php-fpm.conf或/etc/php/7.x/fpm/pool.d/www.conf
    • 确保listen参数与Nginx配置一致: listen = /run/php/php7.4-fpm.sock # 或 listen = 127.0.0.1:9000
  3. Nginx与PHP-FPM通信问题

    • 检查Nginx配置中的fastcgi_pass是否与PHP-FPM监听一致: nginx location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 或 fastcgi_pass 127.0.0.1:9000; }
  4. 资源不足

    • 检查系统资源: bash free -m top
    • 调整PHP-FPM进程数: pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35

四、其他排查工具

  1. 检查PHP配置

    php -m  # 查看加载的模块
    php -i  # 查看完整PHP信息
    
  2. 测试PHP-FPM

    SOCKET=/run/php/php7.4-fpm.sock
    SCRIPT_NAME=/status SCRIPT_FILENAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect $SOCKET
    
  3. Nginx配置测试

    nginx -t
    
  4. 网络连接测试

    netstat -tulnp | grep php-fpm
    

五、临时调试方法

  1. 创建测试PHP文件:

    <?php
    phpinfo();
    

    访问此文件看是否能正常显示

  2. 简化Nginx配置,排除其他干扰

  3. 逐步增加配置复杂度,定位问题点

通过以上步骤,通常可以定位并解决PHP+Nginx环境中的500/502错误问题。