Ubuntu LNMP故障排查系统化流程
首先收集用户反馈(如“网站无法访问”“502 Bad Gateway”)和系统表现(如服务无法启动、响应延迟),明确故障范围(是单个服务异常还是整体架构问题),这是后续排查的基础。
使用systemctl
命令逐一验证LNMP核心服务是否正常运行:
sudo systemctl status nginx # 检查Nginx状态
sudo systemctl status mysql # 检查MySQL/MariaDB状态(根据实际服务名调整)
sudo systemctl status php7.x-fpm # 检查PHP-FPM状态(如php7.4-fpm、php8.1-fpm)
若服务未运行,使用sudo systemctl start <服务名>
启动;若启动失败,需结合日志进一步分析。
日志是定位故障的“金钥匙”,重点检查以下日志的最新错误信息:
/var/log/nginx/error.log
(记录HTTP请求错误、配置语法问题、端口冲突等);/var/log/php7.x-fpm.log
或/var/log/php-fpm/error.log
(记录PHP代码执行错误、FPM进程崩溃等);/var/log/mysql/error.log
(记录数据库连接失败、查询错误、权限问题等)。
使用tail -f <日志路径>
实时查看最新错误动态,快速定位问题根源。配置文件错误是服务无法启动的常见原因,使用以下命令检查语法正确性:
sudo nginx -t # 检查Nginx主配置文件(/etc/nginx/nginx.conf)及站点配置
sudo php-fpm -t # 检查PHP-FPM配置文件(如/etc/php/7.x/fpm/php.ini、/etc/php/7.x/fpm/pool.d/www.conf)
sudo mysql --validate-config # 部分MySQL版本支持(或检查mysqld.cnf语法)
若语法错误,修正后需重启对应服务使更改生效(如sudo systemctl restart nginx
)。
端口冲突会导致服务无法监听指定端口(如Nginx的80/443端口、MySQL的3306端口),使用以下命令检查端口占用情况:
sudo netstat -tulnp | grep ':80' # 检查80端口
sudo netstat -tulnp | grep ':3306' # 检查3306端口
若端口被占用,通过ps -ef | grep <进程名>
找到占用进程,使用kill -9 <进程ID>
终止异常进程,再重启服务。
资源瓶颈(如CPU满载、内存耗尽、磁盘空间不足)会导致服务响应缓慢或崩溃,使用以下命令监控资源状态:
top # 动态查看CPU、内存占用排名
free -h # 查看内存及交换分区使用情况
df -h # 查看磁盘空间使用情况
vmstat 1 5 # 查看虚拟内存、磁盘I/O统计(每秒1次,共5次)
iostat -x 1 5 # 查看磁盘I/O详细情况(需安装sysstat包)
若资源不足,需优化服务配置(如调整PHP-FPM进程数)、清理无用文件或升级服务器配置。
网络问题是网站无法访问的外部因素,需检查以下内容:
ping 8.8.8.8
(测试是否能访问外网);nslookup www.baidu.com
(测试域名解析是否正常);sudo ufw status
(确保允许HTTP(80)、HTTPS(443)、MySQL(3306)等端口流量);telnet <服务器IP> 80
测试端口是否可达。502 Bad Gateway(Nginx与PHP-FPM通信失败):
sudo systemctl status php7.x-fpm
);fastcgi_pass
指令指向PHP-FPM的正确监听地址(如unix:/run/php/php7.4-fpm.sock
或127.0.0.1:9000
);listen
指令是否与Nginx配置一致。500 Internal Server Error(PHP代码或配置错误):
/var/log/php7.x-fpm.log
),定位代码中的语法错误(如缺少分号、括号不匹配);error_reporting(E_ALL); ini_set('display_errors', 1);
),便于调试。403 Forbidden(权限问题):
location
块是否有deny
指令;www-data
)对网站根目录有读取权限(sudo chown -R www-data:www-data /var/www/html
)。过时的系统或软件包可能存在安全漏洞或兼容性问题,定期更新:
sudo apt update # 更新软件包列表
sudo apt upgrade # 升级所有可升级的软件包
sudo apt dist-upgrade # 升级系统版本(可选)
若以上步骤无法解决问题,建议: