温馨提示×

LNMP在Ubuntu上的故障排查方法是什么

小樊
49
2025-10-03 13:38:00
栏目: 智能运维

一、基础状态检查

  • 服务运行状态:使用systemctl命令逐一检查Nginx、MySQL/MariaDB、PHP-FPM(需替换为实际版本,如php7.4-fpm)的服务状态,确认是否处于active (running)状态。若未运行,使用sudo systemctl start 服务名启动对应服务。
  • 端口占用排查:通过netstat -tulnp | grep 端口号(如80对应Nginx、3306对应MySQL)检查关键端口是否被占用。若端口被占用,需终止冲突进程或修改服务端口配置。

二、日志文件分析

  • 核心日志路径
    • Nginx错误日志:/var/log/nginx/error.log
    • MySQL错误日志:/var/log/mysql/error.log
    • PHP-FPM错误日志:/var/log/php7.x-fpm.logx为具体版本号)或/var/log/php-fpm/error.log
  • 实时日志监控:使用tail -f 日志路径(如tail -f /var/log/nginx/error.log)实时查看错误信息,快速定位问题根源(如配置语法错误、权限不足、数据库连接失败等)。

三、配置文件验证

  • 语法检查
    • Nginx:使用sudo nginx -t命令检查主配置文件(/etc/nginx/nginx.conf)及站点配置文件(/etc/nginx/sites-available/default)的语法正确性,若有错误需修正后重启服务。
    • MySQL:若修改过mysqld.cnf/etc/mysql/mysql.conf.d/)或my.cnf,重启服务前建议通过mysqld --validate-config验证配置合法性(部分Ubuntu版本可能需要手动安装mysql-server-core-*包)。
  • 配置一致性:确保Nginx的fastcgi_pass指令(如unix:/var/run/php/php7.4-fpm.sock)与PHP-FPM的listen参数(/etc/php/7.4/fpm/pool.d/www.conf)一致,避免PHP请求无法转发。

四、权限与用户管理

  • 文件/目录权限:确保Nginx用户(通常为www-data)对网站根目录(如/var/www/html)有读取权限,可使用sudo chown -R www-data:www-data /var/www/htmlsudo chmod -R 755 /var/www/html调整。
  • 数据库权限:登录MySQL后,使用SHOW GRANTS FOR '用户名'@'localhost';检查用户权限,若权限不足,可通过GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@'localhost'; FLUSH PRIVILEGES;授权。

五、系统资源监控

  • 资源使用情况:使用top(按M按内存排序、P按CPU排序)或htop(需安装:sudo apt install htop)查看CPU、内存、磁盘I/O使用率。若资源耗尽(如内存不足导致进程被OOM Killer终止),需优化服务配置(如调整PHP-FPM的pm.max_children减少子进程数)或升级服务器配置。

六、常见问题专项解决

  • Nginx无法启动:优先检查nginx -t的语法错误,或通过netstat -tulnp | grep 80确认80端口未被其他进程(如Apache)占用。
  • PHP无法运行:查看PHP-FPM错误日志,常见原因包括php.inidisplay_errors未开启(需设置为On便于调试)、扩展缺失(如php-mysql未安装,通过sudo apt install php-mysql安装)。
  • MySQL连接失败:检查MySQL服务状态(sudo systemctl status mysql),确认bind-address/etc/mysql/mysql.conf.d/mysqld.cnf)是否允许远程连接(如0.0.0.0),并通过SHOW GRANTS FOR '用户名'@'%'检查远程用户权限。
  • 504 Bad Gateway:通常因PHP-FPM响应超时,需调整Nginx的fastcgi_read_timeout(如设置为300s)和PHP-FPM的request_terminate_timeout(如设置为300s),并确保pm.max_children足够处理并发请求。

0