一、问题确认
收集用户反馈(如“网站无法访问”“页面显示502错误”)、系统告警信息(如邮件/短信通知),明确故障的具体表现、发生时间及受影响的服务范围(如仅静态页面异常、动态PHP页面报错)。这一步是后续排查的基础,需尽可能详细记录信息。
二、系统资源监控
使用top
(查看CPU、内存占用排名)、htop
(可视化资源监控)、df -h
(磁盘空间使用情况)、iostat
(磁盘I/O性能)、netstat -tuln
(网络端口监听状态)等命令,检查服务器资源是否充足。重点关注:
三、日志分析
查看各组件的错误日志,定位具体故障原因:
/var/log/nginx/error.log
(常见错误包括配置语法错误、端口冲突、权限不足、upstream后端服务不可用);/var/log/php-fpm/error.log
(常见错误包括PHP脚本语法错误、内存耗尽、进程管理配置不当,如pm.max_children
设置过小导致请求排队);/var/log/mysql/error.log
(常见错误包括数据库启动失败、连接数超过限制、InnoDB缓冲池溢出、慢查询过多)。四、网络连通性测试
使用ping
(测试服务器与客户端之间的网络连通性)、traceroute
(追踪网络路径,定位中间节点故障)、telnet
(测试端口是否可达,如telnet localhost 80
测试Nginx端口)等命令,排除网络问题。若ping
不通,可能是网络线路故障;若telnet
端口失败,可能是防火墙或服务未监听该端口。
五、服务进程与服务状态检查
systemctl status nginx
、systemctl status mysql
、systemctl status php-fpm
命令,确认各服务是否处于“active (running)”状态。若服务未启动,尝试systemctl start
命令启动,并观察启动日志(journalctl -xe
)中的错误信息。ps aux | grep nginx
、ps aux | grep php-fpm
、ps aux | grep mysqld
命令,确认进程是否在运行。若进程不存在,可能是服务崩溃或未启动。netstat -tuln | grep :80
(Nginx默认端口)、netstat -tuln | grep :3306
(MySQL默认端口),确认端口未被其他进程占用(如端口被占用,可使用kill -9 <PID>
终止冲突进程或修改服务端口)。六、配置文件检查
逐一检查各组件的配置文件,确保语法正确且配置合理:
/etc/nginx/nginx.conf
(主配置文件)、站点配置文件(如/etc/nginx/sites-available/default
),重点检查listen
端口、server_name
域名、root
根目录路径、fastcgi_pass
(指向PHP-FPM的socket或端口,如fastcgi_pass unix:/run/php/php7.4-fpm.sock;
)是否正确;/etc/php-fpm.d/www.conf
(池配置文件)、/etc/php.ini
(PHP核心配置),重点检查user
/group
(与Nginx运行用户一致,如www-data
)、listen
(与Nginx的fastcgi_pass
一致)、pm.max_children
(根据服务器内存调整,如pm.max_children = (可用内存 - 系统占用) / 单个PHP进程内存
)、pm.start_servers
(启动时的进程数);/etc/mysql/my.cnf
(或/etc/my.cnf
),重点检查bind-address
(是否允许远程连接,如0.0.0.0
)、max_connections
(最大连接数,避免超过服务器承受能力)、innodb_buffer_pool_size
(InnoDB缓冲池大小,建议设置为物理内存的50%-75%)。nginx -t
、mysql --help | grep "my.cnf"
定位配置文件路径后重启服务),确认无语法错误后再重启服务。七、安全性评估
firewall-cmd --list-all
(CentOS)或iptables -L
(Ubuntu)查看防火墙规则,确认80(HTTP)、443(HTTPS)端口是否开放。若未开放,使用firewall-cmd --add-service=http --permanent
、firewall-cmd --add-service=https --permanent
添加规则并firewall-cmd --reload
生效。getenforce
命令查看SELinux是否启用(“Enforcing”表示启用)。若启用,可临时设置为permissive
模式(setenforce 0
)测试是否因SELinux限制导致故障(如Nginx无法读取网站文件),若故障消失,需调整SELinux策略(如chcon -R -t httpd_sys_rw_content_t /var/www/html
修改文件上下文)。chown -R www-data:www-data /var/www/html
,chmod -R 755 /var/www/html
),避免Nginx或PHP-FPM因权限不足无法访问文件。八、问题修复与验证
根据排查结果采取相应措施:
systemctl restart nginx
、systemctl restart php-fpm
、systemctl restart mysql
);pm.max_children
、innodb_buffer_pool_size
);http://服务器IP
)、查看服务状态(systemctl status
)、检查日志(确认无新错误)等方式验证故障是否解决。九、总结与记录
详细记录故障现象、排查步骤、根本原因及解决方案(如“2025-08-30 14:30 网站无法访问→检查Nginx日志发现502错误→检查PHP-FPM状态发现进程崩溃→调整pm.max_children
从50增加到100→重启PHP-FPM后恢复正常”)。记录的内容可作为后续类似故障的参考,提升排查效率。