腾讯云 × 树莓派摄像头四周实战学习路线 第 2 周 · 第 8 天:Nginx 入门

日期:2026-09-02

环境 :腾讯云 Lighthouse lhins-mxp4fa6e(ap-beijing)· Ubuntu 24.04 · nginx 1.24.0

一句话 :安装 Nginx、打开 80 端口、让公网浏览器看到欢迎页 ------ 但真正学到的不是这条命令链,而是如何定位"通与不通"的边界


一、目标与验收

# 验收项 验证方式 结果
1 装好 Nginx nginx -v nginx/1.24.0 (Ubuntu)
2 在跑 + 开机自启 systemctl status / is-enabled active (running) / enabled
3 服务器内部可访问 curl -I 127.0.0.1 200 OK
4 公网可访问 浏览器 + Mac curl ✅ 欢迎页 / 200 OK
5 说出"三层门"是哪三层 默写 ✅ 见第五节

二、核心概念

1)Nginx 的两个身份

身份 做什么 什么时候用
Web 服务器 自己回答请求,返回静态文件 今天
反向代理服务器 把请求转交给后端(Node / Python / SRS) 第 9 天起

2)80 端口

  • HTTP 默认端口(HTTPS 是 443)
  • 浏览器输 http://IP/ 不写端口,默认就是敲 80 这个房间

3)systemctl(复习 Day 4)

命令 作用 是否换 PID
enable 注册开机自启(当场不启动 ---
start 当场启动(不注册自启 ---
reload 平滑重载配置 ❌ 不变
restart 真重启 ✅ 全换

enable + start 配合使用才是合格操作。第 9 天改配置主要用 reload

4)进程模型

  • 1 master + N worker
  • master 读配置、管手下;worker 真正处理请求
  • worker 数默认 = CPU 核数(本机 2 核 → 2 worker)

三、比喻:写字楼的前台小姐

角色 对应 职责
写字楼 Ubuntu 24.04 操作系统 提供水电气
大堂前台 小 N Nginx 客人进门第一个见到的人,决定他去哪间办公室
房间 80 80 端口 大楼正门(默认门牌号)
浏览器客人 外部访客 顺着地址敲门
门口保安 安全组 + ufw 决定谁能进大门

核心洞察 :就算前台小 N 已经坐在岗位上,如果门口保安不放人进去,外面敲再多也没用。 "服务就绪" ≠ "服务可达"。

Day 9 之后要做的事:让小 N 学会"听口音分诊" ------ 听到 /api/ 请上三楼(Node 服务),听到 /live/ 请去地下(视频流服务)。


四、实战记录

4.1 启动与自启

复制代码
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx
复制代码
Loaded: loaded (...; enabled; preset: enabled)
Active: active (running) since Sun 2026-08-30 21:18:26 CST; 3 days ago
Main PID: 1019262 (nginx)
Tasks: 3 (limit: 2263)
CGroup: /system.slice/nginx.service
        ├─1019262 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
        ├─1019329 "nginx: worker process"
        └─1019330 "nginx: worker process"

已在运行 的服务执行 start 不报错也不变化 ------ start幂等的。

4.2 三层门

层级 归属 怎么改 状态
腾讯云安全组 云厂商 控制台 / MCP,服务器上改不了 ❌→✅
服务器 ufw 操作系统 ufw allow ❌→✅
服务绑定地址 应用 nginx 配置 ✅ 一直是

4.3 关键闭环

时点 测试 结果
安全组未开 服务器内 curl -m 5 -I http://154.8.173.130/ curl: (28) Connection timed out
安全组已开 Mac curl -m 8 -I http://154.8.173.130/ HTTP/1.1 200 OK

同一条命令,开关前后天壤之别 ------ 这就是因果最清晰的证明。


五、今天的五个坑

坑 1:curl 127.0.0.1 通,但 curl 公网IP 超时

命令 流量路径 过安全组
curl 127.0.0.1 纯本机回环,不出网卡 不过
curl 154.8.173.130 出网卡 → 云网络绕一圈 → 回来 要过

"自己访问自己"也要走完整网络栈 + 安全组。

坑 2:(28) timed out(7) refused

错误码 含义 你的判断
(28) timed out 包被静默丢弃(防火墙 DROP) 先查防火墙
(7) refused 有人明确拒绝 服务没在听这个端口

坑 3:pgrep -c nginx 数的不是 worker 数

复制代码
echo "worker 数: $(pgrep -c nginx)"    # → 3(含 master!)

正确写法:

复制代码
pgrep -c -f "nginx: worker process"
ps -eo args | grep -c "[n]ginx: worker"

[n]ginx 的方括号是老运维手法:模式串 [n]ginx ≠ 进程字面量 nginxgrep 不会把自己数进去。去掉方括号就多数 1 个。

坑 4:Default: deny (incoming) 时,DENY 规则是冗余的

那条 15809/tcp DENY IN(OpenClaw 卸载后遗留)没干活 ------ 默认策略已把未放行端口全挡了。

坑 5:查 80 端口别写成 grep ':80'

复制代码
sudo ss -tlnp | grep -E ':80\b'    # ✅ 锚定
sudo ss -tlnp | grep ':80'         # ❌ 误捞 8080、8800

同理 grep -E '8000|8888' 竖线打丢会变成 88888889静默筛空没输出 ≠ 不存在。


六、深层洞见(真正值钱的部分)

洞见 1:能定位"哪一层",比"会修"更值钱

今天从 timed out 一眼定位到防火墙层 ------ 这个判断力才是核心资产。

  • 任何"端到端不通"的问题都能拆成 N 层
  • 找到"通"与"不通"的分界点,就找到了故障点
  • 推论:会修是技能,会定位是能力

洞见 2:沉默比拒绝的信息量更少

现象 你得到的信息
refused 对方在,但不要你 → 服务活着
timed out 对方不说话 → 什么都不知道

推论:遇到沉默,靠"分层对比测试"破局,不要靠猜。

顺带:DROP 之所以不给回应,是故意的 ------ 让攻击者分不清"端口空闲"和"端口存在但拒绝"。沉默是一种防御策略。

洞见 3:同一个东西,叫不同的名字,走完全不同的路

  • 127.0.0.1 → 回环(lo),内核内部,不出网卡
  • 154.8.173.130 → eth0 → 云网络 → 绕回来

更深层:在云/分布式环境里,"标识"决定"路径",不是"是谁"决定路径。

这解释了运维界的经典噩梦:"本机测试通过,上线就挂"

洞见 4:观测工具本身会影响你看到什么

pgrep -c nginx → 3;pgrep -c -f "nginx: worker" → 2。同一个系统,两种问法。

推论:当系统行为不符合预期,先怀疑"我的观测方式错了",再怀疑"系统错了"。

🚩 这是新手和高手的分水岭:新手第一反应是"系统坏了",高手第一反应是"我是不是看错了"。

洞见 5:冗余 ≠ 无用 ------ 配置会"说话"

15809/tcp DENY IN 技术上冗余,但它表达了意图:"我们特别警惕这个端口"。

  • 代码/配置的价值不只是执行 ,还有沟通
  • 推论:别急着删"看起来没用"的东西,先问它想表达什么

什么时候它才真正起作用?当你把默认策略改成 allow (incoming) 时 ------ 那时它就成了唯一的拦截点。

洞见 6:白名单思维 vs 黑名单思维

思维 做法 安全性
白名单(今天用的) 默认 deny,按需放行 ✅ 漏一个只是不可用
黑名单 默认 allow,按需封堵 ❌ 漏一个就是漏洞

推论:从"零信任"开始加例外,而不是从"全信"开始补窟窿。

洞见 7:可恢复性 > 当前可用

nginx 现在跑着不重要,重启后还在吗才重要。

  • enable 就是买保险
  • 推论:任何需要手动拉起的服务,都是一颗定时炸弹

今天那台服务器还提示"需要重启系统"(内核更新待生效)。重启反而是一次真实的自愈演练 ------ 但会打断 SRS,所以先搁着。

洞见 8:尊重硬件约束

worker 数 = CPU 核数,不是"想开多少开多少"。

  • 超过核数只会带来上下文切换开销,不会更快
  • 同一个思想出现在:数据库连接池、线程池、K8s resource limit
  • 推论:好的系统设计会尊重物理约束,而不是无视它

洞见 9:分层验证法(可复用的方法论)

今天做的事抽象出来只有 4 步:

复制代码
1. 分层     → 把"能不能访问"拆成 N 层(云安全组 / ufw / 服务绑定)
2. 逐层验证 → 每层用不同视角的命令(控制台 / ss / curl)
3. 对比差异 → 内网 vs 外网、改前 vs 改后
4. 定位边界 → 找到"通"与"不通"的分界点 = 故障点

这个方法论可以迁移到任何"端到端不通"的排查:数据库连接不上、K8s Service 访问不了、微服务调用超时 ------ 套路完全一样。

相关推荐
流光D33 分钟前
AI时代,搭建 web 站点并配置 nginx 反向代理流程
运维·服务器·前端·人工智能·nginx·ai·ai编程
姚不倒16 小时前
Nginx 反向代理:5 种负载均衡策略与实战
运维·nginx·负载均衡
Achieve前端实验室17 小时前
SSG 预渲染工具站 SEO 优化实践:从零收录到全面修复的 7 个问题
nginx·seo·前端工程化
姚不倒19 小时前
Nginx 虚拟主机:server_name 匹配规则与实战
运维·nginx
hoho_1220 小时前
麒麟V10升级nginx最新版本到1.31.4
java·服务器·nginx
故乡dee云21 小时前
多云账单代付靠谱吗?付款流程、费用核对和账号安全注意事项
安全·阿里云·云计算·腾讯云
姚不倒1 天前
Nginx 核心架构:Master-Worker、epoll、热重载深度解析
运维·nginx·架构
腾讯云大数据1 天前
AI Native数据湖的Spark+Ray一体化实践
大数据·人工智能·spark·腾讯云·腾讯云大数据
痕迹运维2 天前
Nginx SFTP代理
nginx