准备发送 HTTP 请求。
外观
外观
约 3786 字大约 13 分钟
Nginxsystemd端口HTTP
2026-07-30
[Windows PowerShell] wsl ~:打开本机默认的 WSL2 Ubuntu;出现 用户名@主机名:~$ 后再执行标为 [WSL] 的命令。[WSL] ssh root@你的ECS公网IP:从 WSL 连接自己的 ECS;如果登录用户不是 root,请换成控制台显示的实际用户,看到远端提示符后再执行标为 [ECS] 的命令。浏览器里的一张网页,背后至少要有三样东西:一个正在运行的服务、一个正在监听的端口、一条放行的网络路径。
本课在 ECS 上安装 Nginx,发布“云平台课程学习站”的第一张静态页面,然后用服务、端口、HTTP 和安全组证据,把“能访问”或“访问失败”的原因讲清楚。
完成后应留下:
安全边界
本课会安装软件、修改站点文件和开放 Web 端口。每次变更前确认当前终端位于自己的 ECS,切勿在公共演示机上停止服务或修改配置。
访问一个网站时,请求大致经过以下路径:
浏览器或 curl
-> DNS 解析(使用域名时)
-> 服务器 IP
-> TCP 端口
-> 云侧安全组
-> 主机防火墙
-> Nginx 监听端口
-> 站点文件
-> HTTP 响应这条路径包含几个常用概念:
关键提醒
公网地址只负责找到主机,端口负责找到主机上的服务。能 SSH 登录 22 端口,不代表 80 端口上的 Web 服务一定可以访问。
观看时留意:域名、DNS、IP 地址、请求和响应怎样连成一条访问路径?
与本课的关系:视频讲到互联网请求的前半段。进入 ECS 后,还要继续检查端口、Nginx 和页面文件。
交互式模拟
沿着地址解析、网络门禁、端口监听和站点文件追踪一次 HTTP 请求。
◌ 请求和响应是路径模拟,不会访问真实公网地址或修改安全组。
浏览器或 curl 得到一个 HTTP 地址,并准备访问目标主机。
准备发送 HTTP 请求。
用于找到服务器。
安全组和主机防火墙。
监听 HTTP 请求。
例如 index.html。
状态码、响应头和正文。
[WSL] curl -I http://服务器地址排查 Nginx 服务,建立分层调取的习惯:
systemctl status、journalctl);ss -lntp);curl -I http://127.0.0.1);curl 或浏览器)。这四层层层递进,绝不能凭单层结果草率下结论:
active(运行中)状态,不代表它一定绑定了正确的端口;curl 200 只过了服务内部这一关,云侧安全组放没放行还是未知;安装前,习惯性检查当前环境:
whoami、hostname:核对账号与主机,严防误装到 WSL 或错误实例;df -hT /:确认根分区剩余容量;apt-cache policy nginx:确认系统软件包仓库中的 Nginx 版本。[ECS] whoami
[ECS] hostname
[ECS] df -hT /
[ECS] apt-cache policy nginx确认无误后,更新软件包列表并安装:
[ECS] sudo apt update
[ECS] sudo apt install nginx安装过程会列出新增软件包和磁盘占用。看清楚确认信息再继续,没搞明白会改什么之前,慎用 -y 参数。
安装完成不等于服务可用。用下面三条命令检查:
systemctl is-active nginx:快速判断服务当前是否处于活动状态。systemctl is-enabled nginx:判断服务是否设置为随系统启动。systemctl status nginx --no-pager:查看状态、主进程和最近的服务信息。[ECS] systemctl is-active nginx
[ECS] systemctl is-enabled nginx
[ECS] systemctl status nginx --no-pageractive (running) 说明 systemd 认为服务正在运行,但这离确认 80 端口可访问还差一步——接着查监听端口。
下面三条命令分别检查配置、端口和 HTTP:
sudo nginx -t:检查 Nginx 配置语法以及引用的配置文件是否可以读取;修改配置后、重新加载前使用。sudo ss -lntp 'sport = :80':只查看监听 TCP 80 的套接字及关联进程。curl -I http://127.0.0.1:从 ECS 本机发送 HTTP 请求,只查看响应头。[ECS] sudo nginx -t
[ECS] sudo ss -lntp 'sport = :80'
[ECS] curl -I http://127.0.0.1观察三个关键结果:
nginx -t 应显示配置语法检查成功。ss 应出现 Nginx 监听的 80 端口;0.0.0.0:80 表示监听所有 IPv4 本地地址,[::]:80 表示监听 IPv6 地址。curl -I 出现 HTTP/1.1 200 OK 时,说明本机请求已经得到成功响应。如果 curl 返回 404 Not Found,请求通常已经到达 Web 服务,只是目标资源没有找到;如果连接被拒绝,则应先检查端口和服务状态。
从 WSL 访问超时出发,用服务、端口、本机 HTTP 和安全组证据逐层缩小范围。
[WSL] curl -I http://公网地址 -> Connection timed out
下面的案例运行在云主机 B 的课程专用 Compose 项目中。为了不碰共享主机上已有服务,Nginx 只绑定远端回环地址 127.0.0.1:18003。检查顺序仍然与本课一致:先看容器状态,再做 nginx -t,接着检查监听端口,最后用 curl 验证状态码和页面标记。
云主机 B 的课程专用 Compose 项目中运行隔离 Nginx,绑定远端回环地址 127.0.0.1:18003。展示从容器状态到 HTTP 响应的完整检查链路。
root@SYG680400:/opt/xpk-course-demos/lesson-03-04-capture$ docker compose psNAME IMAGE STATUS PORTScloud-course-lab-03-web-1 nginx:1.27-alpine Up 59 minutes (healthy) 127.0.0.1:18003->80/tcp这条命令读取运行状态。应关注服务名称、健康状态、就绪数量和端口映射,不要只凭命令返回了表格就判断业务正常。
这一步是“隔离 Nginx 容器健康,配置语法检查通过,远端回环端口监听,HTTP 返回 200 且页面包含发布标记”证据链中的一环。
只证明课程隔离容器及 18003 端口,不证明宿主机 systemd Nginx、80 端口、安全组或公网访问已经配置

整页截图与上方分步卡片来自同一条记录;敏感字段已经遮盖,较长命令可能经过换行排版。
课程文件在自己实验目录中准备好,再由 sudo 安装到站点目录:
[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在 index.html 中写入:
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>云平台课程学习站</title>
</head>
<body>
<h1>云平台课程学习站</h1>
<p>第 3 次课:Nginx 已在 ECS 上运行。</p>
</body>
</html>保存后先检查文件,再安装到 Nginx 默认站点目录:
[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] curl -s http://127.0.0.1 | sed -n '1,20p'更新静态 HTML 文件不需要重启或重新加载 Nginx。只有配置发生变化时,才先运行 nginx -t,再执行:
[ECS] sudo systemctl reload nginxreload 让 Nginx 重新读取配置;它不是修一切问题的万能按钮。
公网请求可能经过两道网络门禁:
阿里云安全组
Ubuntu 主机防火墙
ufw 检查。[ECS] sudo ufw status verbose如果输出为 Status: active,在确认 SSH 访问不会受影响的前提下,只增加 Web 端口:
[ECS] sudo ufw allow 80/tcp
[ECS] sudo ufw status numbered如果输出为 Status: inactive,记录当前状态即可,无需临时启用。
安全组规则至少核对五项:
安全边界
不要删除原有 SSH 规则,也不要把“全部协议、全部端口、所有来源”作为排障办法。修改规则前保留原状态,修改后只验证本课需要的 TCP 80。
ECS 本机 curl 成功后,再从 WSL 测试外部路径。先把变量值替换为自己的 ECS 公网地址:
[WSL] ECS_IP="在这里填写自己的ECS公网地址"
[WSL] curl -I "http://$ECS_IP"随后在 Windows 浏览器地址栏输入自己的 HTTP 地址。页面应出现“云平台课程学习站”。
三份证据回答的问题各不相同:
curl:Nginx 能否在服务器内部响应。curl:TCP 80 是否能从外部经过安全组和主机防火墙。截图时保留 HTTP 状态、服务器提示符和页面标题,隐藏完整公网地址。
案例使用 SSH 隧道把远端 127.0.0.1:18003 临时映射到本地控制端 127.0.0.1:11803,浏览器实际取得了同一站点页面。隧道没有扩大服务器的公网暴露范围。

日志分三路检查:
journalctl -u nginx -n 30 --no-pager:查看 systemd 记录的 Nginx 启停和服务错误;服务启动失败时使用。tail -n 20 /var/log/nginx/access.log:查看最近到达 Nginx 的 HTTP 请求;确认请求是否真正到达服务。tail -n 20 /var/log/nginx/error.log:查看 Nginx 处理请求或读取文件时记录的错误。[ECS] sudo journalctl -u nginx -n 30 --no-pager
[ECS] sudo tail -n 20 /var/log/nginx/access.log
[ECS] sudo tail -n 20 /var/log/nginx/error.log如果 WSL 请求之后 access.log 出现了对应记录,说明请求已经到达 Nginx。反过来,外部请求超时、访问日志却完全没有新记录,问题多半还在 Nginx 之前的网络路径上——不过仍要结合服务、端口和安全组证据一起判断。
日志中可能包含访问来源和请求路径。作业只截取必要行,并对公网地址和无关信息脱敏。
观看时留意:怎样按服务和时间找到与一次访问最接近的日志?
与本课的关系:不同服务的日志位置并不相同。本课以 Nginx access.log、error.log 和实际请求时间为准。
常见现象及排查方向:
systemctl 显示 inactive(未运行)
systemctl status、journalctl 和配置语法。服务 active,但没有监听 TCP 80
nginx -t、Nginx listen 配置和日志。ECS 本机返回 200,WSL 超时
HTTP 返回 404
HTTP 返回 403
故障报告统一记录:
原始现象:
命令运行位置:
服务状态证据:
监听端口证据:
本机 HTTP 证据:
公网路径证据:
当前原因:
采取的最小修复:
修复后验证:交互式模拟
同样是“网页打不开”,服务、端口、本机 HTTP 和公网链路会留下不同证据。
◌ 故障状态来自教学模拟,不会停止 Nginx,也不会修改真实防火墙或安全组。
服务、监听、本机 HTTP 和公网访问全部正常,先记住健康状态的证据。
nginx.service 正常运行。
Nginx 正在监听目标端口。
127.0.0.1 返回成功状态。
外部 TCP 80 可以进入。
可以读取课程首页。
输入脱敏后的服务、端口、HTTP 或安全组证据,让助教判断现有证据指向哪一层。
本实验的原始聊天仅保存在当前标签页,不会写入全局课程助教上下文。
案例随后只停止本课的 web 容器,回环入口立即出现 Connection refused 和 curl 退出码 7。启动容器并等待健康检查后,沿原地址重新检查,状态码恢复为 200,页面标记也再次出现。这说明恢复服务后仍要重新核对端口、HTTP 和内容,不能只看启动命令没有报错。
在云主机 B 隔离 Compose 项目中停止 web 容器,观察连接拒绝现象,恢复后验证 HTTP 和页面标记。
...$ docker compose stop webContainer cloud-course-lab-03-web-1 Stopped“停止指定服务”保留了完整命令和与它相邻的输出。判断时应直接引用输出中的字段或状态,不要把步骤名称当成结论。
这一步是“停止 Web 容器后入口连接被拒绝且 curl 退出码为 7,恢复后容器 healthy、HTTP 200 和页面标记均通过”证据链中的一环。
这是可恢复的单容器停止故障,只说明本次连接拒绝,不代表所有 Nginx 故障都应重启服务

整页截图与上方分步卡片来自同一条记录;敏感字段已经遮盖,较长命令可能经过换行排版。
实训分为四项任务:
ECS 暂不可用时,可以在 WSL 完成网络路径图、命令识读和给定故障案例,服务器可用后再补充服务、端口和公网证据。WSL 本机页面不能作为公网 ECS 结果。
完整步骤、截图清单和验收脚本见实训 03:部署并排查 Nginx。配套文件位于该页面链接的课程资源目录。
提交前停止 Nginx 并清理防火墙规则:
[ECS] sudo systemctl stop nginx
[ECS] sudo ufw delete allow 80/tcp
[ECS] rm -rf ~/cloud-course/lab-03最终提交:
班级_学号_姓名_第03次课_Nginx服务与端口故障报告.docxWord 中依次放入安装前检查、服务状态、监听端口、本机 HTTP、课程首页、公网访问、日志和故障工单。每张截图都要写明运行位置、关键输出和结论。
检查服务、端口、本机 HTTP、公网路径和故障报告是否形成完整证据链。
关键提醒
整理完成后,将一个最终 .docx 上传到智慧职教在线平台“第03次课”对应的作业收集中。不要上传含公网地址的终端记录、控制台原图或服务器配置目录。
小测检查以下判断能力:
用 6 道题检查服务状态、监听端口、HTTP、日志和安全组的基本判断。
本课搭好了课程学习站的第一个 Web 服务:
ss 证明端口是否监听,curl 证明 HTTP 是否返回响应。journalctl、访问日志和错误日志分别提供不同层面的证据。下一次课备份 Nginx 站点目录,比较本地文件、云盘、快照和对象存储的区别,并完成一次可验证的恢复。
助教会读取当前课程页面和结构化学习记录,但不会读取正文实验框里的原始聊天。