Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
22 KiB
belongs_to
| belongs_to | |
|---|---|
|
📡 BC-INFRA-DNS-SSL-001-FM · DEV-002肥猫 · 基础设施·通配符DNS + SSL证书签发 + 沙箱子域名验证 + Nginx备用站路由修复 · Phase 6 前置 · 🐱 舒舒线 · EL-6(2026-03-26 · 霜砚签发 · 冰朔授权)
〇、背景:为什么要做这个
铸渊在 AGE OS 塔台架构升级中设计了子域名沙箱隔离系统:每个开发者有自己的子域名(dev-002.guanghulab.com、dev-004.guanghulab.com 等),互不干扰。
铸渊已经完成了:
- ✅ Nginx 子域名配置模板(
deploy/nginx/dev-sandbox.conf)已提交到仓库 - ✅ 沙箱目录路由规则已定义(
/var/www/sandbox/dev-XXX/)
但有两件事铸渊做不了,必须人类手动操作:
- 通配符 DNS — 在阿里云域名控制台添加
*.guanghulab.com解析 - 通配符 SSL 证书 — 在服务器上用 certbot 签发
*.guanghulab.com证书(需要 DNS 验证)
肥猫,今天之之没空,这个任务交给你。
〇·一、安全红线(每次都要读)
一、Phase 1 · 阿里云DNS控制台 — 添加通配符 A 记录
目的:让所有 *.guanghulab.com 子域名都指向我们的服务器。
步骤 1-1 · 登录阿里云域名控制台
- 打开浏览器,进入 阿里云控制台
- 用冰朔给你的阿里云账号登录
- 在左侧找到「域名解析」或「云解析 DNS」
- 找到
guanghulab.com这个域名,点进去
📸 截图:进入 guanghulab.com 的解析设置页面后截图给妈妈!
步骤 1-2 · 查看现有 DNS 记录
进入解析设置后,你会看到一个 DNS 记录列表。
先截图现有的所有记录,让妈妈确认当前状态。
📸 截图:所有现有 DNS 记录!
特别注意看:
- 有没有
@记录(主域名 guanghulab.com)指向8.155.62.235? - 有没有已存在的
*通配符记录?
步骤 1-3 · 添加通配符 A 记录
点击「添加记录」按钮,填写以下内容:
| 字段 | 填什么 | 说明 |
|---|---|---|
| 记录类型 | A | 将域名指向 IP 地址 |
| 主机记录 | * | 通配符,匹配所有子域名 |
| 解析线路 | 默认 | 不用改 |
| 记录值 | 8.155.62.235 | 我们的阿里云服务器 IP |
| TTL | 10分钟(或默认值) | 生效时间,越短越快生效 |
填好后点「确认」。
📸 截图:添加记录的填写页面(确认前截一张)+ 添加成功后的记录列表!
二、Phase 2 · 验证 DNS 生效(服务器端)
目的:确认通配符 DNS 记录已生效。DNS 传播可能需要几分钟。
步骤 2-1 · SSH 登录服务器
ssh root@8.155.62.235
步骤 2-2 · 验证 DNS 解析
#!/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。
📸 截图给妈妈!
三、Phase 3 · 签发通配符 SSL 证书(服务器端)
目的:用 Let's Encrypt 签发 *.guanghulab.com 通配符 SSL 证书,让所有子域名都能用 HTTPS。
步骤 3-1 · 检查 certbot 是否已安装
certbot --version
- 如果显示版本号(如
certbot 2.x.x) → ✅ 已安装,跳到 3-2 - 如果显示
command not found→ 需要安装,执行下面这段:
# 安装 certbot(如果没有的话)
sudo yum install -y certbot 2>/dev/null || sudo apt install -y certbot 2>/dev/null
certbot --version
📸 截图 certbot 版本!
步骤 3-2 · 检查现有证书
先看看服务器上有没有已存在的证书:
echo "===== 📋 现有 SSL 证书 ====="
certbot certificates 2>/dev/null
echo ""
echo "📂 证书目录:"
ls -la /etc/letsencrypt/live/ 2>/dev/null || echo "证书目录不存在"
echo "===== ✅ ====="
📸 截图给妈妈!告诉我们现有证书状态。
步骤 3-3 · 签发通配符证书(关键步骤!)
在服务器上执行:
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 记录是否生效:
dig +short TXT _acme-challenge.guanghulab.com
如果返回了你刚添加的那串字符 → ✅ 可以继续
如果返回空 → 再等 1 分钟
第四步:回到 certbot 的终端窗口,按回车继续。
成功标志: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 · 验证证书(服务器端)
目的:确认证书文件已正确生成。
#!/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 能正确加载新证书,为铸渊部署子域名配置做准备。
#!/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 · 子域名访问测试
目的:初步测试子域名是否可达。
#!/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 排查修复(新增任务)
肥猫需要做的:
步骤 6+-1 · 排查 Nginx 配置现状
#!/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。
修复后测试:
# 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
📸 修复前后都要截图给妈妈!
七、完成后 · 诊断汇总表
肥猫做完所有步骤后,按下面格式汇报给妈妈:
📡 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: [状态码/连接失败]
五、遗留事项
- [列出还没完成的或有问题的]
八、肥猫完成后的流程
肥猫完成 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 访问异常 | 立即停止所有操作!截图告诉妈妈! |
十、关联文档
- 服务器部署适配协议 v1.0:🏗️ 服务器部署适配协议 v1.0(2026-03-15·曜冥签发)
- 铸渊塔台架构升级(下篇·Phase 6 子域名隔离):🔗 铸渊指令|AGE OS 塔台架构升级(下篇)· 行业代表制 + MCP应用开发 + 子域名隔离 + 回执验收(ZY-AGEOS-TOWER-2026-0326-001)· 霜砚签发 · 冰朔授权
- 之之排查广播(前次诊断):[🔍 之之排查广播|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)
📥 SYSLOG 回执区
肥猫完成后在这里粘贴 SYSLOG:
待肥猫填写