一、故障确认:明确问题边界
首先收集用户反馈(如“网站无法访问”“页面显示502错误”)和系统告警信息(如邮件、短信告警),确定故障的具体表现(如服务不可用、功能异常、性能下降)及受影响的组件(Nginx、MySQL、PHP或网络)。这一步是后续排查的基础,避免盲目操作。
二、系统资源检查:排除资源瓶颈
使用top(查看CPU、内存占用排名)、htop(更直观的资源监控)、df -h(磁盘空间使用情况)、iostat -x 1(磁盘I/O负载)、netstat -s(网络流量统计)等命令,检查系统资源是否充足。常见资源瓶颈包括:
三、日志分析:定位问题根源
查看LNMP组件的错误日志,这是排查故障的关键线索:
/var/log/nginx/error.log,记录HTTP请求错误(如404、500)、SSL配置错误、upstream连接失败等;/var/log/php-fpm/error.log,记录PHP代码语法错误、数据库连接失败、超时等问题;/var/log/mysql/error.log(或/var/log/mysqld.log),记录数据库启动失败、表损坏、查询超时等;slow_query_log = ON,long_query_time = 2),定位执行缓慢的SQL语句。四、服务进程检查:确认服务状态
使用以下命令检查LNMP服务是否正常运行:
systemctl status nginx:查看Nginx服务状态(是否处于active (running));systemctl status php-fpm:查看PHP-FPM服务状态(是否处于running);systemctl status mysql:查看MySQL服务状态(是否处于active (running));ps aux | grep nginx:检查Nginx进程是否存在;ps aux | grep php-fpm:检查PHP-FPM进程是否存在(通常有多个worker进程);netstat -tuln | grep ':80\|:443':检查Nginx监听端口是否正常(80/443端口是否处于LISTEN状态)。systemctl restart nginx),并查看重启日志(journalctl -xe)获取失败原因。五、配置文件检查:修正配置错误
检查LNMP组件的配置文件,确保语法正确且配置合理:
nginx -t命令测试配置文件语法(如/etc/nginx/nginx.conf、/etc/nginx/sites-available/default),重点检查server_name、root(网站根目录)、fastcgi_pass(PHP-FPM监听地址,如unix:/run/php/php7.4-fpm.sock或127.0.0.1:9000)等配置;php-fpm -t命令测试配置文件语法(如/etc/php/7.4/fpm/php-fpm.conf、/etc/php/7.4/fpm/pool.d/www.conf),重点检查listen(监听地址)、pm.max_children(最大子进程数,需根据服务器内存调整,如pm.max_children = 50表示最多启动50个PHP进程)、user/group(进程属主,通常为www-data或nobody)等配置;my.cnf(/etc/my.cnf或/etc/mysql/my.cnf)配置,重点检查bind-address(监听地址,如0.0.0.0允许远程访问)、max_connections(最大连接数,避免连接数耗尽)、innodb_buffer_pool_size(InnoDB缓冲池大小,建议设置为物理内存的50%-70%)等配置。六、网络连通性测试:排除网络问题
使用以下命令测试网络连通性:
ping <目标IP>:检查服务器与目标设备(如数据库服务器、客户端)之间的网络是否可达;traceroute <目标IP>:跟踪数据包路由路径,定位网络中断点;telnet <目标IP> <端口>:测试目标端口是否开放(如telnet 127.0.0.1 9000测试PHP-FPM端口是否可达);netstat -tuln | grep <端口>:检查端口是否被其他进程占用(如Nginx和PHP-FPM均监听80端口会导致冲突)。iptables -L)、SELinux(getenforce)或路由器配置,确保必要端口(80、443、3306、9000)开放。七、权限与安全检查:避免权限问题
www-data或nobody)对网站根目录、日志目录有读取权限(如chown -R www-data:www-data /var/www/html,chmod -R 755 /var/www/html);getenforce返回Enforcing),需调整SELinux策略(如setsebool -P httpd_can_network_connect_db 1允许Nginx连接数据库);iptables -L或firewall-cmd --list-all检查防火墙规则,确保放行Nginx(80、443端口)、MySQL(3306端口)、PHP-FPM(9000端口)的流量。八、常见问题针对性解决
fastcgi_pass配置错误、pm.max_children过小(进程数不足导致无法处理请求)。解决方法:重启PHP-FPM(systemctl restart php-fpm)、修正fastcgi_pass路径、调整pm.max_children(如根据服务器内存计算:可用内存/单个PHP进程内存≈pm.max_children);/var/log/php-fpm/error.log),修复代码错误(如缺少分号、括号不匹配),确保Nginx用户有权限访问网站文件;deny规则或权限不足。解决方法:检查Nginx配置中的location块(如deny all;是否误用),确保Nginx用户对网站目录有读取权限;my.cnf语法(mysql --help | grep "my.cnf"定位配置文件路径)、修正数据目录权限(chown -R mysql:mysql /var/lib/mysql)、检查端口是否被占用(netstat -tuln | grep 3306)。