Ubuntu系统中LNMP环境故障排查需要系统性思维,本文将从服务状态检查到日志分析提供完整解决方案。

一 快速定位流程
- 检查服务状态:通过sudo systemctl status命令依次确认Nginx、PHP-FPM、MySQL/MariaDB运行状态,未运行则启动并观察提示信息。
- 校验配置语法:Nginx使用sudo nginx -t命令验证;PHP-FPM与MySQL修改配置后同样需要语法校验并根据情况重新加载。
- 查看关键日志:使用tail -f命令实时坚控错误日志,重点观察首次报错位置和时间节点。
- 端口与连通性:检查80/443端口状态及防火墙规则;远程访问问题需同时排查云安全组和本地防火墙设置。
- 最小复现:先切换到静态页面和默认站点配置,逐步恢复自定义配置以定位问题层级。这套"服务状态-配置语法-日志-端口-复现"的闭环排查流程能有效缩小问题范围。
二 常见故障与处理要点
- Nginx无法启动或端口占用:通过sudo nginx -t检查语法;使用ss或netstat命令查找80/443端口占用进程并释放;修复后重启Nginx服务。
- 502/504错误:通常由PHP-FPM未运行或fastcgi_pass配置不匹配导致。需要确认PHP-FPM运行状态,并确保Nginx配置中的fastcgi_pass与php-fpm配置文件中的listen设置完全一致。
- 403禁止访问:检查网站根目录及文件权限,确保Nginx工作进程用户具有读和执行权限,同时确认目录中包含有效的index文件。
- 404找不到文件:核对root路径配置,确保location匹配规则和try_files设置正确,PHP文件必须交由FastCGI处理。
- 数据库连接失败:确认MySQL服务运行状态,检查应用配置中的连接参数;远程访问需要放行3306端口并设置正确的用户权限。
- 访问缓慢或超时:分析Nginx和PHP-FPM错误日志,对MySQL开启慢查询日志功能定位耗时SQL语句。这些高频问题通过日志分析和配置核对通常能快速解决。
三 日志位置与分析方法
- Nginx日志:访问日志位于/var/log/nginx/access.log,错误日志在/var/log/nginx/error.log。常用tail -f和grep命令进行实时坚控和关键词过滤。
- PHP-FPM日志:路径因版本而异,常见位置包括/var/log/php7.x-fpm.log或/var/log/php-fpm/error.log。建议在生产环境关闭display_errors并开启log_errors。
- MySQL日志:错误日志默认位于数据目录,文件名为hostname.err。通过配置slow_query_log可以记录执行缓慢的SQL语句。
- 系统日志:结合dmesg和/var/log/syslog观察系统级异常情况。采用"组件日志-关键词-时间段"的组合检索方式能快速定位问题根源。
四 配置与权限核对清单
- Nginx配置:重点检查include文件路径、server_name、root目录、index设置以及PHP处理区块。修改后务必执行配置测试和重载操作。
- PHP-FPM配置:核对listen参数、用户组设置以及资源限制参数,确保与Nginx的fastcgi_pass配置保持一致。
- MySQL配置:检查bind-address、数据目录和socket文件设置。远程访问需要正确配置bind-address和用户权限。
- 文件权限:确保网站目录对Nginx/PHP-FPM工作用户可读可执行,日志目录可写。注意SELinux/AppArmor等安全模块可能导致的访问限制。
- 防火墙设置:放行必要的80/443/3306端口,变更后需重新测试访问。
五 一键排障命令清单
# 1) 服务状态sudo systemctl status nginxsudo systemctl status php7.4-fpm # 按实际版本调整sudo systemctl status mysql# 2) 配置语法与重载sudo nginx -t && sudo systemctl reload nginxsudo systemctl restart php7.4-fpmsudo systemctl restart mysql# 3) 端口与进程ss -tulpen | grep ':80|:443'ss -lunpt | grep php-fpmlsof -i :80# 4) 实时日志sudo tail -f /var/log/nginx/error.logsudo tail -f /var/log/php7.4-fpm.logsudo tail -f /var/log/mysql/error.log# 5) 防火墙sudo ufw statussudo ufw allow 80/tcpsudo ufw allow 443/tcp# 6) 磁盘与系统df -hdmesg | tail -n 50cat /var/log/syslog | tail -n 50
通过本文提供的系统化排查方法和实用命令,能够有效解决Ubuntu LNMP环境中的各类常见问题,确保Web服务稳定运行。