Nginx作为Ubuntu服务器上常用的Web服务器,故障排查需围绕日志分析、配置验证、端口冲突、权限设置等核心环节展开。以下是系统化的排查步骤:
Nginx的错误日志是定位故障的“钥匙”,默认路径为/var/log/nginx/error.log。使用以下命令实时查看最新错误信息(按Ctrl+C退出实时模式):
sudo tail -f /var/log/nginx/error.log
日志中会明确提示故障类型(如语法错误、端口冲突、权限不足),例如“unknown directive”表示配置指令错误,“permission denied”表示权限问题。
配置文件语法错误是Nginx无法启动的常见原因。使用nginx -t命令测试配置文件(默认检查/etc/nginx/nginx.conf及include的子配置文件):
sudo nginx -t
若语法正确,输出会显示“syntax is ok”和“test is successful”;若存在错误,会明确提示错误位置(如文件名、行号)及原因(如缺少分号、括号不匹配),需根据提示修正。
Nginx默认使用**80(HTTP)和443(HTTPS)**端口,若这些端口被其他进程(如Apache、旧版Nginx)占用,会导致启动失败。使用以下命令检查端口占用:
sudo netstat -tulnp | grep -E ':80|:443' # 查看80/443端口的进程
# 或
sudo lsof -i :80 # 仅查看80端口
若发现占用进程,可通过kill -9 <PID>终止该进程(需确认进程无用),或修改Nginx配置文件中的listen指令(如将80改为8080)。
Nginx进程通常以www-data用户(或nginx)身份运行,需确保其有权访问配置文件、日志目录、站点根目录。常见权限问题及修复方法:
/var/www/html):sudo chown -R www-data:www-data /var/www/html # 将所有者设为www-data
sudo chmod -R 755 /var/www/html # 设置目录权限为755
/etc/nginx/目录及子文件可读(chmod 644)。使用以下命令检查Nginx服务运行状态:
sudo systemctl status nginx
若服务未运行,输出会显示“inactive (dead)”;若启动失败,会提示具体原因(如配置错误、端口冲突)。根据状态信息执行相应操作:
sudo systemctl start nginxsudo systemctl restart nginxsudo systemctl reload nginx。Ubuntu默认使用ufw防火墙,需确保放行Nginx的默认端口:
sudo ufw allow 80/tcp # 允许HTTP流量
sudo ufw allow 443/tcp # 允许HTTPS流量
sudo ufw reload # 重新加载防火墙规则
若启用了SELinux(较少见于Ubuntu),需调整策略或临时禁用(setenforce 0),避免其阻止Nginx访问资源。
若Nginx作为反向代理或负载均衡器,需确保后端服务(如PHP-FPM、Node.js、数据库)正常运行。例如,若出现“502 Bad Gateway”错误,可能是PHP-FPM未启动:
sudo systemctl status php-fpm # 检查PHP-FPM状态(根据版本调整,如php7.4-fpm)
sudo systemctl start php-fpm # 启动PHP-FPM
系统资源耗尽可能导致Nginx无法启动或响应缓慢。使用以下命令检查资源使用情况:
free -h # 查看内存使用(重点关注“可用”内存)
df -h # 查看磁盘空间(重点关注“可用”空间)
top # 查看CPU占用(重点关注Nginx进程的CPU使用率)
若资源不足,需清理无用文件(如日志)、增加服务器资源或优化Nginx配置(如调整worker_processes)。
通过以上步骤,可覆盖Nginx故障的常见原因。若问题仍未解决,建议结合具体错误日志进一步分析,或参考Nginx官方文档(nginx.org)获取更详细的解决方案。