shuangyan-notebook/第五域 · Fifth Domain/⚒️ 铸渊·协作指令|GitHub ↔ Notion 桥接协议/📡 BC-INFRA-DNS-SSL-001-FM · DEV-002肥猫 · 基础设施·通配符DN f8800e359dfe4e4b9eb00f37f45a9df6.md
Guanghu Domestic Migration a27e87cb99 chore: import sanitized domestic snapshot for REPO-007
Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc

[SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
2026-07-17 15:59:55 +08:00

22 KiB
Raw Blame History

belongs_to
belongs_to
INDEX · 铸渊·协作指令GitHub ↔ Notion 桥接协议

📡 BC-INFRA-DNS-SSL-001-FM · DEV-002肥猫 · 基础设施·通配符DNS + SSL证书签发 + 沙箱子域名验证 + Nginx备用站路由修复 · Phase 6 前置 · 🐱 舒舒线 · EL-62026-03-26 · 霜砚签发 · 冰朔授权)


〇、背景:为什么要做这个

铸渊在 AGE OS 塔台架构升级中设计了子域名沙箱隔离系统:每个开发者有自己的子域名(dev-002.guanghulab.comdev-004.guanghulab.com 等),互不干扰。

铸渊已经完成了:

  • Nginx 子域名配置模板(deploy/nginx/dev-sandbox.conf)已提交到仓库
  • 沙箱目录路由规则已定义(/var/www/sandbox/dev-XXX/

但有两件事铸渊做不了,必须人类手动操作

  1. 通配符 DNS — 在阿里云域名控制台添加 *.guanghulab.com 解析
  2. 通配符 SSL 证书 — 在服务器上用 certbot 签发 *.guanghulab.com 证书(需要 DNS 验证)

肥猫,今天之之没空,这个任务交给你。


〇·一、安全红线(每次都要读)


一、Phase 1 · 阿里云DNS控制台 — 添加通配符 A 记录

目的:让所有 *.guanghulab.com 子域名都指向我们的服务器。

步骤 1-1 · 登录阿里云域名控制台

  1. 打开浏览器,进入 阿里云控制台
  2. 用冰朔给你的阿里云账号登录
  3. 在左侧找到「域名解析」或「云解析 DNS
  4. 找到 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.pemprivkey.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. 子域名 HTTPDNS 是否生效):"
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. 子域名 HTTPSSSL 是否生效):"
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 能正确路由到备用站的文件目录。

情况 Broot 路径指向错误

备用站的文件在服务器上的实际路径与 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 访问异常 立即停止所有操作!截图告诉妈妈!

十、关联文档



📥 SYSLOG 回执区

肥猫完成后在这里粘贴 SYSLOG

待肥猫填写