温馨提示×

ubuntu nginx故障排查流程

小樊
57
2025-10-02 07:59:29
栏目: 智能运维

Ubuntu环境下Nginx故障排查流程(结构化步骤)

1. 快速确认Nginx服务基础状态

首先检查Nginx服务是否处于运行状态,这是最基础的排查动作。
命令sudo systemctl status nginx

  • 若显示“active (running)”则表示服务正常;若显示“inactive (dead)”或“failed”,则需要进一步启动服务或排查失败原因。
  • 启动/重启服务命令:sudo systemctl start nginx(启动)、sudo systemctl restart nginx(重启)。

2. 查看Nginx错误日志(核心诊断依据)

Nginx的错误日志记录了详细的故障信息,是定位问题的关键。
日志路径:默认位于/var/log/nginx/error.log(可通过nginx -V命令确认自定义路径)。
查看方式

  • 实时跟踪最新错误:sudo tail -f /var/log/nginx/error.log
  • 查看最后10条错误:sudo tail -n 10 /var/log/nginx/error.log
    常见日志内容及含义
  • open() "/var/www/html/index.html" failed (2: No such file or directory):请求的文件不存在,需检查root指令配置的路径是否正确;
  • [emerg] invalid parameter "listen" in /etc/nginx/sites-enabled/default:5:配置文件语法错误(如listen指令参数无效),需用nginx -t验证语法;
  • upstream timed out (110: Connection timed out) while reading response header from upstream:上游服务(如PHP-FPM、Node.js)未响应,需检查后端服务状态。

3. 验证Nginx配置文件语法

配置文件语法错误是Nginx无法启动或运行的常见原因。
命令sudo nginx -t

  • 输出“syntax is ok”表示配置正确;若显示“parse error”,则会提示错误位置(如文件名、行号),需根据提示修改对应配置文件(如/etc/nginx/nginx.conf/etc/nginx/sites-available/default),修改后再次验证语法。

4. 检查端口占用情况

Nginx默认监听80(HTTP)和443(HTTPS)端口,若端口被其他进程占用,会导致Nginx无法启动或无法访问。
命令

  • 查看80端口占用:sudo netstat -tulnp | grep 80sudo lsof -i :80
  • 查看443端口占用:sudo netstat -tulnp | grep 443sudo lsof -i :443
    解决方法
  • 若端口被Apache、MySQL等其他服务占用,可停止冲突服务(sudo systemctl stop apache2)或修改Nginx的listen指令(如改为listen 8080),修改后重启Nginx。

5. 确认文件及目录权限

Nginx进程(通常为www-data用户)需要对网站文件及目录有读取权限,否则会出现403 Forbidden错误。
检查命令ls -ld /var/www/html(查看网站根目录权限)。
修正权限

  • 将目录所有者设为www-datasudo chown -R www-data:www-data /var/www/html
  • 设置目录权限为755(文件为644):sudo chmod -R 755 /var/www/html(文件:sudo chmod -R 644 /var/www/html/*)。

6. 检查依赖服务状态(针对LNMP/LAMP环境)

若网站依赖PHP、MySQL等后端服务,需确保这些服务正常运行。
检查命令

  • PHP-FPM:sudo systemctl status php7.4-fpm(根据PHP版本调整,如php8.1-fpm);
  • MySQL/MariaDB:sudo systemctl status mysqlsudo systemctl status mariadb
    解决方法:若服务未运行,使用sudo systemctl start php7.4-fpmsudo systemctl start mysql启动服务。

7. 排查防火墙/SELinux限制

防火墙或SELinux可能阻止Nginx的网络访问,导致无法从外部访问网站。
Ubuntu防火墙(UFW)检查

  • 查看防火墙状态:sudo ufw status
  • 放行HTTP/HTTPS端口:sudo ufw allow 80/tcpsudo ufw allow 443/tcp
    SELinux(若启用)
  • 临时禁用:sudo setenforce 0(生产环境慎用,建议调整策略而非完全禁用)。

8. 分析系统资源使用情况

系统资源耗尽可能导致Nginx响应缓慢或崩溃。
检查命令

  • 查看内存使用:free -h(关注“Available”内存);
  • 查看磁盘空间:df -h(关注“Use%”是否超过90%);
  • 查看CPU负载:tophtop(关注“%CPU”占用高的进程)。
    解决方法:若内存不足,可优化Nginx配置(如减少worker_processes数量)、增加服务器内存;若磁盘空间不足,清理无用文件(如日志、缓存)。

9. 处理常见特定错误

  • 502 Bad Gateway:通常因后端服务(如PHP-FPM)未启动或端口配置错误。检查后端服务状态(sudo systemctl status php7.4-fpm),确认Nginx的fastcgi_pass指令指向正确的后端端口(如fastcgi_pass unix:/run/php/php7.4-fpm.sock;)。
  • 403 Forbidden:多为权限问题(如文件所有者不是www-data)或index指令未配置。检查权限(chown)及Nginx配置中的index指令(如index index.html index.php)。
  • 404 Not Found:请求的资源不存在或root/alias指令配置错误。检查网站根目录是否存在对应文件,确认root指令路径是否正确(如root /var/www/html;)。

通过以上结构化流程,可覆盖Ubuntu环境下Nginx故障的常见场景。若问题仍未解决,可结合错误日志中的具体信息(如模块名、错误代码)进一步深入排查,或参考Nginx官方文档获取针对性支持。

0