502 Bad Gateway 错误是 Nginx 作为反向代理服务器时,无法从上游服务器(如 PHP-FPM)获取有效响应时产生的错误。以下是常见原因及解决方案:
systemctl status php-fpm # 或 php7.4-fpm/php8.0-fpm 等
如果服务停止,启动它:
systemctl start php-fpm
systemctl enable php-fpm # 设置开机启动
确保 Nginx 配置中的 fastcgi_pass 指向正确的 PHP-FPM 监听地址:
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 或 127.0.0.1:9000
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
检查 /etc/php-fpm.conf
或 /etc/php/7.4/fpm/pool.d/www.conf
(路径可能不同):
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
根据服务器资源调整这些值。
在 Nginx 和 PHP-FPM 中增加超时时间:
Nginx:
fastcgi_read_timeout 300;
PHP-FPM:
request_terminate_timeout = 300
free -h # 内存
top # CPU
df -h # 磁盘空间
如果资源不足,考虑升级服务器或优化应用。
确保 Nginx 用户(通常是 www-data 或 nginx)有权限访问 PHP 文件和 socket:
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
对于 socket 文件:
ls -l /run/php/php-fpm.sock
临时禁用 SELinux 测试:
setenforce 0
如果问题解决,需要配置正确的 SELinux 策略:
chcon -R -t httpd_sys_content_t /var/www/html
检查防火墙是否阻止了 9000 端口(如果使用 TCP 连接)。
检查以下日志获取更多信息:
# Nginx 错误日志
tail -f /var/log/nginx/error.log
# PHP-FPM 错误日志
tail -f /var/log/php-fpm.log # 或 /var/log/php7.4-fpm.log
通过系统日志和 PHP 错误日志可以进一步定位具体问题。