一、故障排查基础流程
top(查看CPU/内存占用)、df -h(查看磁盘空间)、iostat(查看磁盘I/O)、netstat -tuln(查看网络端口占用)等命令,判断是否因资源耗尽(如内存不足、磁盘满)导致故障。/var/log/nginx/error.log(错误日志)、/var/log/nginx/access.log(访问日志,查看异常请求);/var/log/php-fpm/error.log(进程错误)、/var/log/php-fpm/www-error.log(PHP脚本错误);/var/log/mysql/error.log(数据库错误)、/var/log/mysql/slow.log(慢查询日志,定位性能瓶颈)。ps aux | grep nginx、ps aux | grep php-fpm、ps aux | grep mysql确认服务进程是否运行;用systemctl status nginx、systemctl status php-fpm、systemctl status mysql(或service命令)检查服务状态,若进程未启动则尝试重启。nginx -t(测试配置语法,如nginx.conf、站点虚拟主机配置);php-fpm -t(测试php-fpm.conf及pool.d/www.conf中的listen地址、pm.max_children等参数);mysqld --validate-config(验证my.cnf配置,如端口、数据目录路径);ping(测试服务器与客户端网络连通性)、traceroute(追踪路由路径)、telnet <IP> <端口>(如telnet 127.0.0.1 9000测试PHP-FPM端口)或nc -zv <IP> <端口>,排除网络阻断或端口未开放问题。iptables -L或firewall-cmd --list-all)是否放行Nginx(80/443端口)、PHP-FPM(默认9000端口)的流量;若启用SELinux,用getenforce查看状态,临时关闭setenforce 0测试是否因SELinux策略导致故障。二、常见故障及解决方法
fastcgi_pass与PHP-FPM的listen地址一致(如fastcgi_pass unix:/tmp/php-fpm.sock;对应PHP-FPM的listen = /tmp/php-fpm.sock);② 调整PHP-FPM的pm.max_children(如根据服务器内存计算:可用内存/单个PHP进程内存≈进程数,如1GB内存可设为20-30);③ 确保Nginx用户(如www-data)与PHP-FPM的listen.owner/listen.group一致,且网站目录权限为755(文件644)。error_reporting(E_ALL); ini_set('display_errors', 1);,临时显示错误信息;② 检查/var/log/php-fpm/www-error.log中的具体错误(如未定义函数、文件路径错误);③ 修改php.ini中的display_errors = On、log_errors = On,重启PHP-FPM使设置生效。mysqld --validate-config测试配置文件语法;② 检查MySQL数据目录(如/var/lib/mysql)权限,确保MySQL用户(如mysql)有读写权限(chown -R mysql:mysql /var/lib/mysql);③ 用netstat -tuln | grep 3306检查端口是否被占用,若被占用则修改my.cnf中的port或停止占用进程。nginx -t检查配置文件(如nginx.conf中的server_name、root路径是否正确);② 用netstat -tuln | grep 80检查80端口是否被其他服务(如Apache)占用;③ 确保Nginx配置文件(如/etc/nginx/nginx.conf)和日志文件(如/var/log/nginx/error.log)有正确的读写权限(chown -R root:root /etc/nginx、chmod -R 755 /var/log/nginx)。pm.max_children(如从30调整为20,减少进程数);② 优化MySQL查询(用EXPLAIN分析慢查询,添加索引);③ 调整Nginx的worker_processes(设为CPU核心数,如worker_processes 4)、worker_connections(设为1024,提高并发连接数)。