---
url: /courses/cloud-platform-build-management/lab-03/index.md
---
# 实训 03：部署并排查 Nginx 服务

## 任务情境

团队准备把课程学习站发布到云服务器。你需要安装 Nginx、发布一张静态首页、验证 TCP 80 的内外访问路径，并根据教师提供的故障案例完成一份证据化报告。

## 开始前

新建 Word 文档：

```txt
班级_学号_姓名_第03次课_Nginx服务与端口故障报告.docx
```

解压配套包，填写其中的 `nginx-service-report-template.docx`，并阅读：

* [课程作业提交规范](./assignment-submission-policy.md)
* [实验安全与费用策略](./lab-safety-policy.md)

## 完成路径

### A 路径：ECS 可用

在自己的 Ubuntu ECS 完成安装、站点发布、TCP 80 规则和公网验证。

### B 路径：ECS 暂不可用

在 WSL 完成命令识读、访问链路图和教师提供的合成故障案例。报告中明确写“本次未形成 ECS 公网服务证据”，服务器可用后补交。

## 安全边界

* 只管理自己的课程 ECS，不在教师演示机或共享服务器上停止服务。
* 不删除 SSH 安全组规则，不开放全部协议和端口。
* `ufw` 未启用时只记录状态，不在不了解 SSH 规则时直接启用。
* 修改 Nginx 配置前备份，修改后先运行 `sudo nginx -t`。
* 不把公网地址、账号、密码、私钥或控制台原图放进 Word。
* 故障由教师分配，不自行在他人服务器上制造故障。

## 任务 1：安装与服务检查

执行前检查：

```bash
[ECS] whoami
[ECS] hostname
[ECS] df -hT /
[ECS] apt-cache policy nginx
```

确认目标无误后安装：

```bash
[ECS] sudo apt update
[ECS] sudo apt install nginx
```

安装后检查：

```bash
[ECS] systemctl is-active nginx
[ECS] systemctl is-enabled nginx
[ECS] systemctl status nginx --no-pager
[ECS] sudo nginx -t
```

写入 Word：

* 图 1：安装前账号、主机、磁盘和软件包状态；
* 图 2：Nginx 服务状态与配置检查；
* 解释 `active`、`enabled` 和 `nginx -t` 分别证明什么。

## 任务 2：发布首页并完成本机验证

准备实验目录并备份默认站点：

```bash
[ECS] mkdir -p ~/cloud-course/lab-03/backup
[ECS] cd ~/cloud-course/lab-03
[ECS] sudo cp -a /var/www/html/. ./backup/
[ECS] nano index.html
```

写入正文提供的 HTML，随后执行：

```bash
[ECS] sed -n '1,20p' index.html
[ECS] sudo install -m 0644 index.html /var/www/html/index.html
[ECS] stat /var/www/html/index.html
[ECS] sudo ss -lntp 'sport = :80'
[ECS] curl -I http://127.0.0.1
[ECS] curl -s http://127.0.0.1 | sed -n '1,20p'
```

写入 Word：

* 图 3：TCP 80 监听证据；
* 图 4：ECS 本机 HTTP 状态和首页内容；
* 解释本机成功为什么还不能证明公网成功。

## 任务 3：核对两道网络门禁

检查主机防火墙：

```bash
[ECS] sudo ufw status verbose
```

若状态为 active，按教师要求只允许 TCP 80；若为 inactive，只记录结果。

在阿里云控制台核对安全组入方向 TCP 80。截图只保留规则需要的协议、端口和来源范围，隐藏实例、账号和地址信息。

从 WSL 测试：

```bash
[WSL] ECS_IP="在这里填写自己的ECS公网地址"
[WSL] curl -I "http://$ECS_IP"
```

最后从 Windows 浏览器访问课程首页。

写入 Word：

* 图 5：主机防火墙状态；
* 图 6：脱敏后的安全组 TCP 80 规则；
* 图 7：WSL HTTP 响应；
* 图 8：Windows 浏览器中的课程首页。

## 任务 4：完成故障工单

教师会分配一种故障：

1. 服务停止；
2. Nginx 未监听预期端口；
3. ECS 本机正常但安全组没有 TCP 80。

按以下顺序取证：

```bash
[ECS] systemctl status nginx --no-pager
[ECS] sudo ss -lntp 'sport = :80'
[ECS] curl -I http://127.0.0.1
[ECS] sudo journalctl -u nginx -n 30 --no-pager
[ECS] sudo tail -n 20 /var/log/nginx/error.log
```

需要外部证据时，再从 WSL 发起 HTTP 请求并核对安全组。

故障报告填写：

```txt
原始现象：
第一条证据：
服务状态：
监听端口：
本机 HTTP：
公网路径：
故障原因：
最小修复：
修复后验证：
```

## 任务 5：验收与提交

在实训包目录运行：

```bash
[ECS] bash verify.sh
```

验收脚本只检查当前可观察状态，不能代替人工解释。Word 中记录 `[PASS]`、`[WARN]` 和对应处理。

提交前检查：

* 首页可以从 ECS 本机和外部访问；
* Nginx 服务、端口和 HTTP 证据完整；
* 故障报告形成闭环；
* 截图有编号、位置、关键输出和结论；
* 公网地址、账号和控制台信息已脱敏；
* 最终只上传一个 `.docx`；
* 智慧职教显示“提交成功”。
