--- belongs_to: - "[[INDEX · 铸渊·协作指令|GitHub ↔ Notion 桥接协议]]" --- # 📡 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/`) 但有两件事铸渊做不了,**必须人类手动操作**: 1. **通配符 DNS** — 在阿里云域名控制台添加 `*.guanghulab.com` 解析 2. **通配符 SSL 证书** — 在服务器上用 certbot 签发 `*.guanghulab.com` 证书(需要 DNS 验证) **肥猫,今天之之没空,这个任务交给你。** --- ## 〇·一、安全红线(每次都要读) --- ## 一、Phase 1 · 阿里云DNS控制台 — 添加通配符 A 记录 **目的**:让所有 `*.guanghulab.com` 子域名都指向我们的服务器。 ### 步骤 1-1 · 登录阿里云域名控制台 1. 打开浏览器,进入 [阿里云控制台](https://dns.console.aliyun.com/) 2. 用冰朔给你的阿里云账号登录 3. 在左侧找到「**域名解析**」或「**云解析 DNS**」 4. 找到 `guanghulab.com` 这个域名,点进去 📸 **截图:进入 [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分钟**(或默认值) | 生效时间,越短越快生效 | 填好后点「**确认**」。 📸 **截图:添加记录的填写页面(确认前截一张)+ 添加成功后的记录列表!** --- ## 二、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`。 📸 **截图给妈妈!** --- ## 三、Phase 3 · 签发通配符 SSL 证书(服务器端) **目的**:用 Let's Encrypt 签发 `*.guanghulab.com` 通配符 SSL 证书,让所有子域名都能用 HTTPS。 ### 步骤 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 · 签发通配符证书(关键步骤!) 在服务器上执行: ```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 的终端窗口,**按回车继续**。 **成功标志**: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 能正确加载新证书,为铸渊部署子域名配置做准备。 ```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 · 子域名访问测试 **目的**:初步测试子域名是否可达。 ```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 排查修复(新增任务) ### 肥猫需要做的: #### 步骤 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 ``` 📸 **修复前后都要截图给妈妈!** --- ## 七、完成后 · 诊断汇总表 肥猫做完所有步骤后,按下面格式汇报给妈妈: ```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) --- --- ## 📥 SYSLOG 回执区 肥猫完成后在这里粘贴 SYSLOG: ```jsx 待肥猫填写 ```