跳到主要内容

个人技术博客 · Linux 运维 / 自动化 / 可观测性

Nginx排障过程

约 3 分钟阅读

故障

博客原来运行正常,但尝试通过htps://117.72.192.68 访问时,浏览器显示ERR_CONNRCTION_TIMED_OUT(响应超时)。尝试在系统内重启Nginx服务时,也遭遇了启动失败。本文记录了完整的排查思路、使用的命令以及最终解决过程。

排障过程与核心命令

排障思路#

在排障中,我遵循了网络 ➡ 端口 ➡ 服务 ➡ 配置 ➡ 日志 ➡ 进程

一、 确认云平台安全组与防火墙#

首先确认京东云控制台的安全组,已放行 80 和 443 端口。接着检查系统内部防火墙状态,确保没有拦截

sudo ufw status

🔍 命令解析
sudo:临时借用最高管理员(root)权限。
ufw:Ubuntu系统的防火墙管理工具
status:查看当前防火墙规则,确保没有拦截端口。

二、检查端口监听状态

端口时网络服务的“大门”
检查 443 端口:

sudo ss -tlnp | grep ':443'

检查 80 端口

sudo ss -tlnp | grep ':80'

🔍 命令解析
ss:Socket Statistics,查看端口和连接
-tlnp:-t看TCP:-l看监听:-n看显示数字:-p显示进程名。
|:管道符,把前面的结果交给后面处理
grep ‘:443’:过滤出包含443的行。
⚠️ 排查结果
查443无任何输出,说明443没启动:
查80发现被多个 nginx 进程占用。

三、检查服务运行状态

发现异常后,查看系统管家记录的服务状态。

sudo systemctl status nginx

尝试启动:

sudo systemctl start nginx

🔍 命令解析

systemctl:系统的服务管家。

status:查状态(显示 dead 表示没运行)。

start:尝试启动服务。
⚠️ 排查结果
启动报错 Job for nginx.service failed…

四、 检查 Nginx 配置语法

启动失败最常见的原因是配置文件写错。

sudo nginx -t

🔍 命令解析
-t 代表 test,让 Nginx 自己检查配置。

✅ 排查结果
显示 syntax is ok 和 test is successful,说明代码没问题。

五、 查看系统底层日志#

配置没问题,去看看系统底层发生了什么。

sudo journalctl -xe -u nginx --no-pager | tail -n 20

🔍 命令解析

journalctl:查看系统日志。

-xe:显示详细错误。

-u nginx:只看 nginx 的。

–no-pager:不分页显示。

tail -n 20:只看最后 20 行。

六、 找出真凶与清理

结合前面发现 80 端口被占,真相大白:有一个“野生”的旧 Nginx 进程卡死了,占着 80 端口,导致新服务起不来。

强制杀掉旧进程:

sudo pkill -9 nginx

清理后重新启动并检查:

sudo systemctl start nginx
sudo systemctl status nginx

🔍 命令解析
pkill -9 nginx 意思是强制(-9 信号)杀掉所有叫 nginx 的进程。把旧钉子拔掉,系统管家就能成功把 Nginx 重新拉起来了。

✅ 解决成功
再次检查状态,显示绿色的 active (running),浏览器访问恢复正常!

(在这里插入 status 变绿色的截图)

七、 运维核心知识点总结

知识点 说明
端口排他性 一个 IP 的特定端口(如 80),同一时间只能被一个服务监听。
多端口支持 一个 Nginx 服务可以同时监听 80 和 443 等多个端口。
Nginx 进程结构 查 80 端口看到好几个 nginx 是一家人:1 个 Master 主进程负责占端口,多个 Worker 负责干活。
黄金排障思路 网络 → 端口 → 服务 → 配置 → 日志 → 杀进程重启。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注