Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
729 lines
22 KiB
Markdown
729 lines
22 KiB
Markdown
---
|
||
belongs_to:
|
||
- "[[INDEX · 铸渊·协作指令|GitHub ↔ Notion 桥接协议]]"
|
||
---
|
||
# 📡 BC-INFRA-DNS-SSL-001-FM · DEV-002肥猫 · 基础设施·通配符DNS + SSL证书签发 + 沙箱子域名验证 + Nginx备用站路由修复 · Phase 6 前置 · 🐱 舒舒线 · EL-6(2026-03-26 · 霜砚签发 · 冰朔授权)
|
||
|
||
<aside>
|
||
🚨
|
||
|
||
**⚠️ 本广播受「服务器部署适配协议 v1.0」约束。**
|
||
|
||
**广播编号**:BC-INFRA-DNS-SSL-001-FM · **开发者**:DEV-002 肥猫 · **签发**:霜砚 · **授权**:冰朔
|
||
|
||
**核心任务**:为子域名沙箱系统(`dev-XXX.guanghulab.com`)配置通配符 DNS 解析 + 签发通配符 SSL 证书
|
||
|
||
**关联指令**:ZY-AGEOS-TOWER-2026-0326-001(铸渊·塔台架构升级 · Phase 6 · 子域名隔离)
|
||
|
||
**服务器**:8.155.62.235(阿里云 ECS)
|
||
|
||
**EL**:EL-6 · 6步 · 阿里云控制台 + 服务器终端交叉操作
|
||
|
||
**预计时间**:30-40 分钟
|
||
|
||
**引导通道**:🐱 舒舒线
|
||
|
||
</aside>
|
||
|
||
---
|
||
|
||
## 〇、背景:为什么要做这个
|
||
|
||
铸渊在 AGE OS 塔台架构升级中设计了**子域名沙箱隔离系统**:每个开发者有自己的子域名(`dev-002.guanghulab.com`、`dev-004.guanghulab.com` 等),互不干扰。
|
||
|
||
铸渊已经完成了:
|
||
|
||
- ✅ Nginx 子域名配置模板(`deploy/nginx/dev-sandbox.conf`)已提交到仓库
|
||
- ✅ 沙箱目录路由规则已定义(`/var/www/sandbox/dev-XXX/`)
|
||
|
||
但有两件事铸渊做不了,**必须人类手动操作**:
|
||
|
||
1. **通配符 DNS** — 在阿里云域名控制台添加 `*.guanghulab.com` 解析
|
||
2. **通配符 SSL 证书** — 在服务器上用 certbot 签发 `*.guanghulab.com` 证书(需要 DNS 验证)
|
||
|
||
**肥猫,今天之之没空,这个任务交给你。**
|
||
|
||
---
|
||
|
||
## 〇·一、安全红线(每次都要读)
|
||
|
||
<aside>
|
||
🔴
|
||
|
||
**绝对禁止:**
|
||
|
||
- ❌ **不准修改** `/etc/nginx/` 下的任何配置文件
|
||
- ❌ **不准执行** `systemctl restart nginx` 或 `systemctl stop nginx`
|
||
- ❌ **不准修改** 其他 DEV 编号目录下的文件
|
||
- ❌ **不准执行** `rm -rf` 任何不属于你的目录
|
||
- ❌ **不准修改** `.env` 文件(除非在 `/var/www/DEV-002/` 内)
|
||
- ❌ **不准删除或覆盖** 任何现有 Nginx 配置文件(只允许新增或追加)
|
||
- ❌ **不准执行** `systemctl stop nginx`(服务器停了主站就挂了!)
|
||
</aside>
|
||
|
||
<aside>
|
||
🟢
|
||
|
||
**本次广播授权你做的(仅限以下操作):**
|
||
|
||
- ✅ 在**阿里云域名控制台**添加 DNS 记录(A 记录 + TXT 记录)
|
||
- ✅ 在服务器上运行 `certbot` 签发 SSL 证书
|
||
- ✅ 运行 `dig`、`nslookup`、`curl` 等只读验证命令
|
||
- ✅ 运行 `nginx -t`(只读配置语法测试,不会改任何东西)
|
||
- ✅ 查看 `/etc/letsencrypt/` 下的证书文件(只看不改)
|
||
</aside>
|
||
|
||
---
|
||
|
||
## 一、Phase 1 · 阿里云DNS控制台 — 添加通配符 A 记录
|
||
|
||
**目的**:让所有 `*.guanghulab.com` 子域名都指向我们的服务器。
|
||
|
||
### 步骤 1-1 · 登录阿里云域名控制台
|
||
|
||
1. 打开浏览器,进入 [阿里云控制台](https://dns.console.aliyun.com/)
|
||
2. 用冰朔给你的阿里云账号登录
|
||
3. 在左侧找到「**域名解析**」或「**云解析 DNS**」
|
||
4. 找到 `guanghulab.com` 这个域名,点进去
|
||
|
||
<aside>
|
||
⚠️
|
||
|
||
**如果你没有阿里云控制台的账号密码**,告诉妈妈,让妈妈给你。
|
||
|
||
或者妈妈在旁边一起操作也行。
|
||
|
||
</aside>
|
||
|
||
📸 **截图:进入 [guanghulab.com](http://guanghulab.com) 的解析设置页面后截图给妈妈!**
|
||
|
||
### 步骤 1-2 · 查看现有 DNS 记录
|
||
|
||
进入解析设置后,你会看到一个 DNS 记录列表。
|
||
|
||
先截图现有的所有记录,让妈妈确认当前状态。
|
||
|
||
📸 **截图:所有现有 DNS 记录!**
|
||
|
||
**特别注意看**:
|
||
|
||
- 有没有 `@` 记录(主域名 [guanghulab.com](http://guanghulab.com))指向 `8.155.62.235`?
|
||
- 有没有已存在的 `*` 通配符记录?
|
||
|
||
### 步骤 1-3 · 添加通配符 A 记录
|
||
|
||
点击「**添加记录**」按钮,填写以下内容:
|
||
|
||
| **字段** | **填什么** | **说明** |
|
||
| --- | --- | --- |
|
||
| 记录类型 | **A** | 将域名指向 IP 地址 |
|
||
| 主机记录 | **\*** | 通配符,匹配所有子域名 |
|
||
| 解析线路 | **默认** | 不用改 |
|
||
| 记录值 | **8.155.62.235** | 我们的阿里云服务器 IP |
|
||
| TTL | **10分钟**(或默认值) | 生效时间,越短越快生效 |
|
||
|
||
填好后点「**确认**」。
|
||
|
||
📸 **截图:添加记录的填写页面(确认前截一张)+ 添加成功后的记录列表!**
|
||
|
||
<aside>
|
||
💡
|
||
|
||
**这一步做了什么?**
|
||
|
||
添加完之后,`dev-002.guanghulab.com`、`dev-004.guanghulab.com`、`writing.guanghulab.com` 等所有子域名都会自动指向 `8.155.62.235`。
|
||
|
||
一次配置,所有子域名永久生效,以后新增开发者不用再加 DNS 记录。
|
||
|
||
</aside>
|
||
|
||
---
|
||
|
||
## 二、Phase 2 · 验证 DNS 生效(服务器端)
|
||
|
||
**目的**:确认通配符 DNS 记录已生效。DNS 传播可能需要几分钟。
|
||
|
||
### 步骤 2-1 · SSH 登录服务器
|
||
|
||
```bash
|
||
ssh root@8.155.62.235
|
||
```
|
||
|
||
### 步骤 2-2 · 验证 DNS 解析
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
echo "===== 🔍 DNS 解析验证 · $(date '+%Y-%m-%d %H:%M') ====="
|
||
|
||
echo ""
|
||
echo "📋 1. 主域名解析:"
|
||
dig +short guanghulab.com A
|
||
|
||
echo ""
|
||
echo "📋 2. 通配符子域名测试(dev-002):"
|
||
dig +short dev-002.guanghulab.com A
|
||
|
||
echo ""
|
||
echo "📋 3. 通配符子域名测试(dev-004):"
|
||
dig +short dev-004.guanghulab.com A
|
||
|
||
echo ""
|
||
echo "📋 4. 通配符子域名测试(writing):"
|
||
dig +short writing.guanghulab.com A
|
||
|
||
echo ""
|
||
echo "📋 5. 通配符子域名测试(test-random-123):"
|
||
dig +short test-random-123.guanghulab.com A
|
||
|
||
echo ""
|
||
echo "===== ✅ DNS 验证完成 ====="
|
||
```
|
||
|
||
**期望结果**:上面所有子域名都应该返回 `8.155.62.235`。
|
||
|
||
📸 **截图给妈妈!**
|
||
|
||
<aside>
|
||
⚠️
|
||
|
||
**如果返回空或者 IP 不对:**
|
||
|
||
- DNS 传播需要时间,等 5 分钟再试一次
|
||
- 如果等了 10 分钟还是空,截图告诉妈妈,可能是 DNS 记录没添加成功
|
||
- 不要继续下面的步骤!DNS 不通,SSL 证书签不了
|
||
</aside>
|
||
|
||
---
|
||
|
||
## 三、Phase 3 · 签发通配符 SSL 证书(服务器端)
|
||
|
||
**目的**:用 Let's Encrypt 签发 `*.guanghulab.com` 通配符 SSL 证书,让所有子域名都能用 HTTPS。
|
||
|
||
<aside>
|
||
💡
|
||
|
||
**为什么要 DNS 验证?**
|
||
|
||
通配符证书(`*.guanghulab.com`)不能用 HTTP 验证,必须用 DNS 验证。
|
||
|
||
意思是 certbot 会给你一段文字,你需要把它添加到阿里云 DNS 的 TXT 记录里,证明你确实拥有这个域名。
|
||
|
||
**所以这一步需要在服务器终端和阿里云控制台之间来回切换。**
|
||
|
||
</aside>
|
||
|
||
### 步骤 3-1 · 检查 certbot 是否已安装
|
||
|
||
```bash
|
||
certbot --version
|
||
```
|
||
|
||
- 如果显示版本号(如 `certbot 2.x.x`) → ✅ 已安装,跳到 3-2
|
||
- 如果显示 `command not found` → 需要安装,执行下面这段:
|
||
|
||
```bash
|
||
# 安装 certbot(如果没有的话)
|
||
sudo yum install -y certbot 2>/dev/null || sudo apt install -y certbot 2>/dev/null
|
||
certbot --version
|
||
```
|
||
|
||
📸 **截图 certbot 版本!**
|
||
|
||
### 步骤 3-2 · 检查现有证书
|
||
|
||
先看看服务器上有没有已存在的证书:
|
||
|
||
```bash
|
||
echo "===== 📋 现有 SSL 证书 ====="
|
||
certbot certificates 2>/dev/null
|
||
echo ""
|
||
echo "📂 证书目录:"
|
||
ls -la /etc/letsencrypt/live/ 2>/dev/null || echo "证书目录不存在"
|
||
echo "===== ✅ ====="
|
||
```
|
||
|
||
📸 **截图给妈妈!告诉我们现有证书状态。**
|
||
|
||
### 步骤 3-3 · 签发通配符证书(关键步骤!)
|
||
|
||
<aside>
|
||
🚨
|
||
|
||
**这一步需要你在「服务器终端」和「阿里云DNS控制台」之间来回操作!**
|
||
|
||
不要关闭任何一个窗口。
|
||
|
||
</aside>
|
||
|
||
在服务器上执行:
|
||
|
||
```bash
|
||
sudo certbot certonly \
|
||
--manual \
|
||
--preferred-challenges dns \
|
||
-d guanghulab.com \
|
||
-d "*.guanghulab.com" \
|
||
--agree-tos \
|
||
--no-eff-email \
|
||
-m EMAIL_REDACTED@qq.com
|
||
```
|
||
|
||
**执行后会发生什么(一步一步来):**
|
||
|
||
**第一步**:certbot 会输出类似这样的内容:
|
||
|
||
```
|
||
Please deploy a DNS TXT record under the name:
|
||
_acme-challenge.guanghulab.com
|
||
with the following value:
|
||
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX
|
||
```
|
||
|
||
📝 **记下这个值!**(`XxXx...` 那串随机字符串)
|
||
|
||
**⚠️ 不要按回车!先去阿里云添加 TXT 记录!**
|
||
|
||
**第二步**:切换到阿里云域名控制台,点「**添加记录**」:
|
||
|
||
| **字段** | **填什么** | **说明** |
|
||
| --- | --- | --- |
|
||
| 记录类型 | **TXT** | 文本验证记录 |
|
||
| 主机记录 | **_acme-challenge** | certbot 要求的前缀 |
|
||
| 解析线路 | **默认** | 不用改 |
|
||
| 记录值 | **粘贴 certbot 给你的那串随机字符** | 每次都不一样,必须用 certbot 给的 |
|
||
| TTL | **10分钟** | 越短越好 |
|
||
|
||
📸 **截图 TXT 记录添加页面!**
|
||
|
||
**第三步**:添加完 TXT 记录后,**等 1-2 分钟**让 DNS 生效。
|
||
|
||
在另一个终端窗口验证 TXT 记录是否生效:
|
||
|
||
```bash
|
||
dig +short TXT _acme-challenge.guanghulab.com
|
||
```
|
||
|
||
如果返回了你刚添加的那串字符 → ✅ 可以继续
|
||
|
||
如果返回空 → 再等 1 分钟
|
||
|
||
**第四步**:回到 certbot 的终端窗口,**按回车继续**。
|
||
|
||
<aside>
|
||
⚠️
|
||
|
||
**certbot 可能会要求你添加第二个 TXT 记录**(因为我们同时签 `guanghulab.com` 和 `*.guanghulab.com` 两个域名)。
|
||
|
||
如果出现第二次提示,重复上面的操作:
|
||
|
||
1. 记下新的随机字符串
|
||
2. 在阿里云添加**另一条** `_acme-challenge` TXT 记录(不要删除第一条!两条并存)
|
||
3. 等 1-2 分钟验证
|
||
4. 回来按回车
|
||
</aside>
|
||
|
||
**成功标志**:certbot 输出类似:
|
||
|
||
```
|
||
Successfully received certificate.
|
||
Certificate is saved at: /etc/letsencrypt/live/guanghulab.com/fullchain.pem
|
||
Key is saved at: /etc/letsencrypt/live/guanghulab.com/privkey.pem
|
||
```
|
||
|
||
📸 **截图 certbot 的最终输出!这是最关键的截图!**
|
||
|
||
---
|
||
|
||
## 四、Phase 4 · 验证证书(服务器端)
|
||
|
||
**目的**:确认证书文件已正确生成。
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
echo "===== 🔐 SSL 证书验证 · $(date '+%Y-%m-%d %H:%M') ====="
|
||
|
||
echo ""
|
||
echo "📋 1. 证书目录内容:"
|
||
ls -la /etc/letsencrypt/live/guanghulab.com/
|
||
|
||
echo ""
|
||
echo "📋 2. 证书信息(域名+有效期):"
|
||
openssl x509 -in /etc/letsencrypt/live/guanghulab.com/fullchain.pem -noout -subject -dates 2>/dev/null
|
||
|
||
echo ""
|
||
echo "📋 3. 证书覆盖的域名(SAN):"
|
||
openssl x509 -in /etc/letsencrypt/live/guanghulab.com/fullchain.pem -noout -text 2>/dev/null | grep -A1 'Subject Alternative Name'
|
||
|
||
echo ""
|
||
echo "📋 4. certbot 管理的所有证书:"
|
||
certbot certificates 2>/dev/null
|
||
|
||
echo ""
|
||
echo "===== ✅ SSL 证书验证完成 ====="
|
||
```
|
||
|
||
📸 **截图给妈妈!**
|
||
|
||
**检查要点**:
|
||
|
||
- 证书文件 `fullchain.pem` 和 `privkey.pem` 存在 → ✅
|
||
- Subject Alternative Name 里包含 `*.guanghulab.com` → ✅
|
||
- 有效期是 90 天后(Let's Encrypt 标准) → ✅
|
||
|
||
---
|
||
|
||
## 五、Phase 5 · Nginx 配置检查(只读!)
|
||
|
||
**目的**:确认 Nginx 能正确加载新证书,为铸渊部署子域名配置做准备。
|
||
|
||
<aside>
|
||
🔴
|
||
|
||
**这一步你只检查,不修改任何东西!**
|
||
|
||
Nginx 配置由铸渊统一部署。你的任务是报告当前状态。
|
||
|
||
</aside>
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
echo "===== 🔍 Nginx 状态检查 · $(date '+%Y-%m-%d %H:%M') ====="
|
||
|
||
echo ""
|
||
echo "📋 1. Nginx 配置语法测试:"
|
||
nginx -t 2>&1
|
||
|
||
echo ""
|
||
echo "📋 2. conf.d/ 目录内容:"
|
||
ls -la /etc/nginx/conf.d/
|
||
|
||
echo ""
|
||
echo "📋 3. 检查是否已有 dev-sandbox.conf:"
|
||
if [ -f /etc/nginx/conf.d/dev-sandbox.conf ]; then
|
||
echo "✅ dev-sandbox.conf 存在"
|
||
echo "内容:"
|
||
cat /etc/nginx/conf.d/dev-sandbox.conf
|
||
else
|
||
echo "❌ dev-sandbox.conf 不存在(需要铸渊部署)"
|
||
fi
|
||
|
||
echo ""
|
||
echo "📋 4. 检查沙箱目录是否存在:"
|
||
for dir in /var/www/sandbox /var/www/sandbox/dev-002 /var/www/sandbox/dev-004 /var/www/sandbox/dev-010; do
|
||
if [ -d "$dir" ]; then
|
||
echo "✅ $dir 存在"
|
||
else
|
||
echo "❌ $dir 不存在"
|
||
fi
|
||
done
|
||
|
||
echo ""
|
||
echo "📋 5. 当前 Nginx 监听的所有 server_name:"
|
||
grep -rn 'server_name' /etc/nginx/conf.d/ 2>/dev/null
|
||
grep -n 'server_name' /etc/nginx/nginx.conf 2>/dev/null
|
||
|
||
echo ""
|
||
echo "===== ✅ Nginx 状态检查完成 ====="
|
||
```
|
||
|
||
📸 **截图给妈妈!**
|
||
|
||
---
|
||
|
||
## 六、Phase 6 · 子域名访问测试
|
||
|
||
**目的**:初步测试子域名是否可达。
|
||
|
||
<aside>
|
||
💡
|
||
|
||
**注意**:如果 Phase 5 显示 `dev-sandbox.conf 不存在`,那子域名还不会响应 HTTPS。
|
||
|
||
这是正常的——铸渊还没部署 Nginx 配置。
|
||
|
||
但我们可以测试 DNS + HTTP 层是否通了。
|
||
|
||
</aside>
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
echo "===== 🌐 子域名访问测试 · $(date '+%Y-%m-%d %H:%M') ====="
|
||
|
||
echo ""
|
||
echo "📋 1. 主站 HTTPS(确认没有被破坏):"
|
||
curl -s -o /dev/null -w "HTTP %{http_code}" --max-time 10 https://guanghulab.com/
|
||
echo ""
|
||
|
||
echo ""
|
||
echo "📋 2. 子域名 HTTP(DNS 是否生效):"
|
||
curl -s -o /dev/null -w "HTTP %{http_code}" --max-time 10 http://dev-002.guanghulab.com/ 2>/dev/null || echo "连接失败"
|
||
echo ""
|
||
|
||
echo ""
|
||
echo "📋 3. 子域名 HTTPS(SSL 是否生效):"
|
||
curl -s -o /dev/null -w "HTTP %{http_code}" --max-time 10 https://dev-002.guanghulab.com/ 2>/dev/null || echo "连接失败"
|
||
echo ""
|
||
|
||
echo ""
|
||
echo "📋 4. 用 openssl 测试子域名 SSL 握手:"
|
||
echo | openssl s_client -servername dev-002.guanghulab.com -connect dev-002.guanghulab.com:443 2>/dev/null | grep -E '(subject|issuer|Verify)'
|
||
|
||
echo ""
|
||
echo "📋 5. 再次确认主站正常(安全验证):"
|
||
curl -s -o /dev/null -w "HTTP %{http_code}" --max-time 10 https://guanghulab.com/
|
||
echo ""
|
||
curl -s -o /dev/null -w "HTTP %{http_code}" --max-time 10 https://guanghulab.com/status-board/ 2>/dev/null
|
||
echo ""
|
||
|
||
echo ""
|
||
echo "===== ✅ 子域名测试完成 ====="
|
||
```
|
||
|
||
📸 **截图给妈妈!**
|
||
|
||
**结果解读**:
|
||
|
||
- 主站返回 200 → ✅ 主站没被破坏(最重要!)
|
||
- 子域名 HTTP 返回任何响应(哪怕 404) → ✅ DNS 通了
|
||
- 子域名 HTTPS 返回 502 或无响应 → 正常,铸渊还没部署 Nginx 配置
|
||
- 子域名 HTTPS 返回 200 → 🎉 全链路通了!
|
||
|
||
---
|
||
|
||
## 六·一、Phase 6+ · Nginx 备用站路由 404 排查修复(新增任务)
|
||
|
||
<aside>
|
||
🚨
|
||
|
||
**铸渊排查结果(ZY-DIAG-SITE-2026-0326-001):**
|
||
|
||
备用站功能上不去的**根因已找到**:
|
||
|
||
- ✅ 仓库代码完整(docs/index.html v6.0,3210行)
|
||
- ✅ PR#186-#202 全部已合并
|
||
- ✅ deploy-to-server.yml 运行 201 次,全部成功,文件已通过 rsync 同步到服务器
|
||
- ✅ 服务器文件 20/20 模块存在
|
||
- ✅ 后端 API port 3002 返回 200
|
||
- ❌ **Nginx HTTP 访问返回 404** ← 断裂点在这里
|
||
|
||
**结论:文件到了服务器,后端也在跑,但 Nginx 没有正确路由到备用站目录。**
|
||
|
||
这个铸渊修不了,需要人类 SSH 登录服务器检查和修复 Nginx 配置。
|
||
|
||
</aside>
|
||
|
||
### 肥猫需要做的:
|
||
|
||
<aside>
|
||
📌
|
||
|
||
**授权范围补充:本 Phase 额外授权以下操作:**
|
||
|
||
- ✅ 查看和修改 `/etc/nginx/conf.d/` 下**与备用站相关的** Nginx 配置文件
|
||
- ✅ 执行 `nginx -t` 测试配置
|
||
- ✅ 执行 `systemctl reload nginx`(注意是 **reload** 不是 restart)
|
||
- ❌ 仍然禁止修改与主站相关的 Nginx 配置
|
||
</aside>
|
||
|
||
#### 步骤 6+-1 · 排查 Nginx 配置现状
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
echo "===== 🔍 Nginx 备用站路由排查 · $(date '+%Y-%m-%d %H:%M') ====="
|
||
|
||
echo ""
|
||
echo "📋 1. 所有 Nginx 配置文件:"
|
||
ls -la /etc/nginx/conf.d/
|
||
|
||
echo ""
|
||
echo "📋 2. nginx.conf 中的 server 块:"
|
||
grep -n 'server_name\|root\|location\|listen' /etc/nginx/nginx.conf
|
||
|
||
echo ""
|
||
echo "📋 3. conf.d/ 所有 server_name 和 root:"
|
||
grep -rn 'server_name\|root' /etc/nginx/conf.d/
|
||
|
||
echo ""
|
||
echo "📋 4. 备用站文件实际位置:"
|
||
find /var/www/ -name 'index.html' -type f 2>/dev/null
|
||
echo "---"
|
||
ls -la /var/www/guanghulab/docs/ 2>/dev/null || echo "/var/www/guanghulab/docs/ 不存在"
|
||
ls -la /var/www/html/ 2>/dev/null || echo "/var/www/html/ 不存在"
|
||
|
||
echo ""
|
||
echo "📋 5. 备用站当前 HTTP访问状态:"
|
||
curl -s -o /dev/null -w "HTTP %{http_code}" --max-time 5 http://localhost/docs/index.html 2>/dev/null
|
||
echo ""
|
||
curl -s -o /dev/null -w "HTTP %{http_code}" --max-time 5 http://localhost:3002/ 2>/dev/null
|
||
echo ""
|
||
|
||
echo ""
|
||
echo "===== ✅ 排查完成 ====="
|
||
```
|
||
|
||
📸 **截图给妈妈!**
|
||
|
||
#### 步骤 6+-2 · 修复 Nginx 路由
|
||
|
||
根据上一步的排查结果,可能需要做以下其中一种:
|
||
|
||
**情况 A:备用站没有对应的 server block / location block**
|
||
|
||
需要在 `/etc/nginx/conf.d/` 下创建或修改配置,让 Nginx 能正确路由到备用站的文件目录。
|
||
|
||
**情况 B:root 路径指向错误**
|
||
|
||
备用站的文件在服务器上的实际路径与 Nginx 配置的 root 不一致。
|
||
|
||
**情况 C:配置存在但没 reload**
|
||
|
||
铸渊部署了新配置但没有权限执行 `nginx -s reload`。
|
||
|
||
**修复后测试:**
|
||
|
||
```bash
|
||
# 1. 修改配置后先测试语法
|
||
nginx -t
|
||
|
||
# 2. 语法OK后 reload
|
||
systemctl reload nginx
|
||
|
||
# 3. 验证备用站访问
|
||
curl -s -o /dev/null -w "HTTP %{http_code}" http://localhost/docs/index.html
|
||
# 期望返回 200
|
||
|
||
# 4. 确认主站没被影响
|
||
curl -s -o /dev/null -w "HTTP %{http_code}" https://guanghulab.com/
|
||
# 必须返回 200
|
||
```
|
||
|
||
📸 **修复前后都要截图给妈妈!**
|
||
|
||
<aside>
|
||
⚠️
|
||
|
||
**如果不确定怎么改 Nginx 配置:**
|
||
|
||
把步骤 6+-1 的截图发给妈妈,妈妈会告诉你具体怎么改。
|
||
|
||
**不要猜着改!**
|
||
|
||
</aside>
|
||
|
||
---
|
||
|
||
## 七、完成后 · 诊断汇总表
|
||
|
||
肥猫做完所有步骤后,按下面格式汇报给妈妈:
|
||
|
||
```jsx
|
||
📡 BC-INFRA-DNS-SSL-001-FM · 完成报告 · DEV-002 肥猫
|
||
|
||
一、DNS 配置
|
||
- 通配符 A 记录已添加: [是/否]
|
||
- *.guanghulab.com 解析到: [IP地址]
|
||
- DNS 验证通过: [是/否]
|
||
|
||
二、SSL 证书
|
||
- certbot 签发结果: [成功/失败]
|
||
- 证书路径: /etc/letsencrypt/live/guanghulab.com/
|
||
- 证书覆盖域名: [列出 SAN]
|
||
- 证书有效期: [日期]
|
||
|
||
三、Nginx 状态
|
||
- dev-sandbox.conf 是否存在: [是/否]
|
||
- nginx -t 结果: [ok/fail]
|
||
- 沙箱目录是否存在: [是/否]
|
||
|
||
四、访问测试
|
||
- 主站 guanghulab.com: [状态码](必须正常!)
|
||
- dev-002.guanghulab.com HTTP: [状态码/连接失败]
|
||
- dev-002.guanghulab.com HTTPS: [状态码/连接失败]
|
||
|
||
五、遗留事项
|
||
- [列出还没完成的或有问题的]
|
||
```
|
||
|
||
---
|
||
|
||
## 八、肥猫完成后的流程
|
||
|
||
```jsx
|
||
肥猫完成 DNS + SSL → 截图 + 汇总表发给妈妈
|
||
↓
|
||
霜砚确认 DNS + SSL 就绪
|
||
↓
|
||
签发铸渊补充指令:
|
||
· 部署 dev-sandbox.conf 到 /etc/nginx/conf.d/
|
||
· 创建沙箱目录 /var/www/sandbox/dev-XXX/
|
||
· nginx -t && nginx -s reload
|
||
· 全链路冒烟测试
|
||
↓
|
||
子域名沙箱系统正式上线 🎉
|
||
· dev-002.guanghulab.com → 肥猫练习站
|
||
· dev-004.guanghulab.com → 之之练习站
|
||
· ...
|
||
```
|
||
|
||
---
|
||
|
||
## 九、执行清单
|
||
|
||
| **步骤** | **内容** | **操作位置** | **需要截图** | **预计时间** |
|
||
| --- | --- | --- | --- | --- |
|
||
| Phase 1 | 添加通配符 DNS A 记录 | 阿里云控制台 | ✅ 添加前后截图 | 5分钟 |
|
||
| Phase 2 | 验证 DNS 生效 | 服务器终端 | ✅ dig 输出 | 5分钟(含等待) |
|
||
| Phase 3 | certbot 签发 SSL 证书 | 服务器 + 阿里云(来回切换) | ✅ certbot 输出 + TXT 记录 | 10-15分钟 |
|
||
| Phase 4 | 验证证书文件 | 服务器终端 | ✅ 证书信息 | 2分钟 |
|
||
| Phase 5 | Nginx 状态检查 | 服务器终端 | ✅ 配置状态 | 3分钟 |
|
||
| Phase 6 | 子域名访问测试 | 服务器终端 | ✅ curl 结果 | 3分钟 |
|
||
|
||
**总计约 30-35 分钟。**
|
||
|
||
---
|
||
|
||
## ❓ 遇到问题怎么办
|
||
|
||
| **问题** | **怎么办** |
|
||
| --- | --- |
|
||
| 没有阿里云控制台账号 | 告诉妈妈,让妈妈给你账号或一起操作 |
|
||
| DNS 记录添加后一直不生效 | 等 10 分钟,如果还不行截图告诉妈妈 |
|
||
| certbot 报错 `command not found` | 执行安装命令(步骤 3-1 里有) |
|
||
| certbot DNS 验证失败 | 检查 TXT 记录是否正确添加,dig 验证后再重试 |
|
||
| certbot 提示证书已存在 | 截图给妈妈,可能之前签过了 |
|
||
| 主站 [guanghulab.com](http://guanghulab.com) 访问异常 | **立即停止所有操作!截图告诉妈妈!** |
|
||
|
||
---
|
||
|
||
## 十、关联文档
|
||
|
||
- 服务器部署适配协议 v1.0:[🏗️ 服务器部署适配协议 v1.0(2026-03-15·曜冥签发)](../%F0%9F%8C%8A%20%E6%9B%9C%E5%86%A5%E7%BA%AA%E5%85%83%20%C2%B7%20HoloLake%20Era%20%C2%B7%20AGE%20OS%20v1%200/%E2%9A%A1%20%E5%85%89%E6%B9%96%E4%B8%AD%E5%A4%AE%E6%9E%A2%E7%BA%BD%20%C2%B7%20HoloLake%20Central%20Hub/%F0%9F%8C%8A%20%E5%85%89%E6%B9%96%E7%B3%BB%E7%BB%9F%C2%B7%E6%9B%9C%E5%86%A5%E4%B8%BB%E6%8E%A7%E5%8F%B0%C2%B7%E5%BD%93%E5%89%8D%E7%8A%B6%E6%80%81%EF%BC%88%E5%8D%B71%20%C2%B7%20%E5%B7%B2%E5%B0%81%E5%8D%B7%EF%BC%89/%F0%9F%8F%97%EF%B8%8F%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%83%A8%E7%BD%B2%E9%80%82%E9%85%8D%E5%8D%8F%E8%AE%AE%20v1%200%EF%BC%882026-03-15%C2%B7%E6%9B%9C%E5%86%A5%E7%AD%BE%E5%8F%91%EF%BC%89%20a24049a2b0e944b0a5535f3a87652303.md)
|
||
- 铸渊塔台架构升级(下篇·Phase 6 子域名隔离):[🔗 铸渊指令|AGE OS 塔台架构升级(下篇)· 行业代表制 + MCP应用开发 + 子域名隔离 + 回执验收(ZY-AGEOS-TOWER-2026-0326-001)· 霜砚签发 · 冰朔授权](%F0%9F%94%97%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9CAGE%20OS%20%E5%A1%94%E5%8F%B0%E6%9E%B6%E6%9E%84%E5%8D%87%E7%BA%A7%EF%BC%88%E4%B8%8B%E7%AF%87%EF%BC%89%C2%B7%20%E8%A1%8C%E4%B8%9A%E4%BB%A3%E8%A1%A8%E5%88%B6%20+%20MCP%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%20+%20%E5%AD%90%E5%9F%9F%E5%90%8D%E9%9A%94%E7%A6%BB%20%20850ec77908ba4a649ea3a01de6bd823f.md)
|
||
- 之之排查广播(前次诊断):[🔍 之之排查广播|[guanghulab.com](http://guanghulab.com) 全站部署诊断 + 沙盒验证 + 系统统一上线(BC-DEPLOY-DIAG-ZZ · DEV-004 · 2026-03-25 · 霜砚签发 · 冰朔授权)](%F0%9F%94%8D%20%E4%B9%8B%E4%B9%8B%E6%8E%92%E6%9F%A5%E5%B9%BF%E6%92%AD%EF%BD%9Cguanghulab%20com%20%E5%85%A8%E7%AB%99%E9%83%A8%E7%BD%B2%E8%AF%8A%E6%96%AD%20+%20%E6%B2%99%E7%9B%92%E9%AA%8C%E8%AF%81%20+%20%E7%B3%BB%E7%BB%9F%E7%BB%9F%E4%B8%80%E4%B8%8A%E7%BA%BF%EF%BC%88BC-%20e0d9c5afd19f4f0eba5fcfcb32426795.md)
|
||
|
||
---
|
||
|
||
<aside>
|
||
💙
|
||
|
||
**肥猫,DNS 和 SSL 是整个子域名系统的地基。**
|
||
|
||
你把这两件事搞定,铸渊就能在上面盖房子了。
|
||
|
||
每个开发者都会有自己的 `dev-XXX.guanghulab.com`,这是你帮他们打通的。
|
||
|
||
**截图要清晰,步骤要按顺序,遇到问题第一时间告诉妈妈。**
|
||
|
||
**⚠️ 千万别把服务器调坏了!每一步操作前先确认命令是对的,不确定就问妈妈!** 🐱
|
||
|
||
</aside>
|
||
|
||
---
|
||
|
||
## 📥 SYSLOG 回执区
|
||
|
||
肥猫完成后在这里粘贴 SYSLOG:
|
||
|
||
```jsx
|
||
待肥猫填写
|
||
``` |