当PHP+Nginx环境出现500(内部服务器错误)或502(网关错误)时,可以按照以下步骤进行排查:
tail -f /var/log/nginx/error.log
# 或根据你的配置路径
tail -f /usr/local/nginx/logs/error.log
tail -f /var/log/php-fpm.log
# 或
tail -f /var/log/php7.x-fpm.log
检查php.ini中的错误日志设置:
php -i | grep error_log
PHP脚本语法错误
php
ini_set('display_errors', 1);
error_reporting(E_ALL);
文件权限问题
chown -R www-data:www-data /path/to/webroot
chmod -R 755 /path/to/webroot
PHP内存不足
memory_limit = 256M
PHP执行超时
max_execution_time = 300
PHP-FPM未运行或崩溃
systemctl status php-fpm
# 重启PHP-FPM
systemctl restart php-fpm
PHP-FPM配置问题
listen = /run/php/php7.4-fpm.sock
# 或
listen = 127.0.0.1:9000
Nginx与PHP-FPM通信问题
nginx
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# 或
fastcgi_pass 127.0.0.1:9000;
}
资源不足
bash
free -m
top
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
检查PHP配置
php -m # 查看加载的模块
php -i # 查看完整PHP信息
测试PHP-FPM
SOCKET=/run/php/php7.4-fpm.sock
SCRIPT_NAME=/status SCRIPT_FILENAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect $SOCKET
Nginx配置测试
nginx -t
网络连接测试
netstat -tulnp | grep php-fpm
创建测试PHP文件:
<?php
phpinfo();
访问此文件看是否能正常显示
简化Nginx配置,排除其他干扰
逐步增加配置复杂度,定位问题点
通过以上步骤,通常可以定位并解决PHP+Nginx环境中的500/502错误问题。