# 宝塔 Nginx + DNS 验证 申请 SSL 证书(详细操作顺序) > 适用:已建好站点 `st-joyapparel.com`、运行目录=`/public`、已配前端控制器伪静态。 > 用 DNS 验证可以**完全绕开** `.well-known/acme-challenge` 路径问题,最稳。 --- ## 一、前置确认(1 分钟) 1. 域名 `st-joyapparel.com` 已在宝塔「网站」里建好站点。 2. 域名解析里**至少有一条 A 记录**指向服务器 `47.107.30.116` (这样证书签发后 HTTPS 才能真正用起来;DNS 验证本身不要求域名解析到本机,但上线必须)。 3. 宝塔 → 网站 → `st-joyapparel.com` → 设置 → 网站目录 → **运行目录 = `/public`**(已设过可跳过)。 4. 伪静态里**只保留**前端控制器那条(去掉之前为 HTTP 验证加的 `.well-known` location 也行,DNS 用不到它): ```nginx try_files $uri $uri/ /index.php?$query_string; ``` --- ## 二、方式 A:DNS API 自动验证(最推荐,零手动) > 前提:域名在阿里云 / 腾讯云 / DNSPod / 华为云等主流平台,且你能拿到 API 密钥。 1. 宝塔左侧 **面板设置**(或站点 SSL 页里的「DNS API」入口)。 2. 找到 **DNS API** 配置,选择你的域名服务商(如「阿里云」)。 3. 填入: - AccessKey ID - AccessKey Secret (在对应云服务商的「访问控制 / API 密钥」里创建,**只给 DNS 解析权限**即可,别给全量权限) 4. 保存。 5. 回到 网站 → `st-joyapparel.com` → **SSL** → **Let's Encrypt**。 6. 验证方式下拉选 **DNS验证**(或「DNS API」)。 7. 勾选要签的域名(`st-joyapparel.com` 和 `www.st-joyapparel.com`)。 8. 点 **申请**。宝塔会自动添加 TXT 记录 → 等待 CA 校验 → **自动签发并部署**。 9. 完成后页面显示「证书已部署」,结束。✅ > 优点:以后**自动续签**也全自动,不用每年手动加记录。 --- ## 三、方式 B:手动 DNS(TXT 记录)验证 > 没有 API 密钥时用这个。缺点:下次续签要再手动加一次 TXT(除非改用 API)。 1. 网站 → `st-joyapparel.com` → **SSL** → **Let's Encrypt**。 2. 验证方式选 **DNS验证**。 3. 页面会列出**需要你手动添加的 DNS 记录**,一般是: - 记录类型:**TXT** - 主机记录:**`_acme-challenge`**(完整即 `_acme-challenge.st-joyapparel.com`) - 记录值:一长串字符(如 `S7ASyftFIXsmMfhFqydT7QfMsFpsmTXRLD7FMZd_AIY` 之类,以页面显示为准) - (如果要给 `www` 也签,会再给一条 `_acme-challenge.www` 的 TXT) 4. **另开一个标签页**,登录你的域名解析控制台 (阿里云:域名 → 解析设置;腾讯云:DNS 解析;DNSPod / Namesilo 等同理)。 5. 添加上面那条 TXT 记录,保存。 6. **等解析生效**(看 TTL,通常 1–10 分钟;用下面命令自查): ```bash nslookup -type=TXT _acme-challenge.st-joyapparel.com # 或 Windows: nslookup -type=TXT _acme-challenge.st-joyapparel.com 8.8.8.8 ``` 看到记录值和你填的一致,说明生效。 7. 回到宝塔,点 **验证 / 申请**。CA 读到 TXT 后即签发并自动部署。 --- ## 四、签发后必做 1. SSL 页确认证书状态为「已部署」,有效期约 90 天。 2. 开启 **强制 HTTPS**(SSL 页里有开关)→ 访问 `http://` 自动跳 `https://`。 3. 浏览器访问 `https://st-joyapparel.com/` 和 `https://www.st-joyapparel.com/`,确认: - 地址栏出现小锁 🔒 - 前台页面、后台 `/admin` 都正常(之前配的 `try_files` 继续生效) 4. 跑部署收尾(若还没跑): ```bash cd /www/wwwroot/st-joyapparel.com bash deploy.sh rm -rf install # 删安装目录 ``` 后台 → 设置 → 管理员,改掉默认密码 `admin888`。 --- ## 五、自动续签 - **DNS API 方式**:宝塔默认会在计划任务里加 Let's Encrypt 自动续签,到期前自动换证,无需人工。 - **手动 DNS 方式**:续签时 TXT 记录值会变,需重新加一次(建议趁机切到 API 方式一劳永逸)。 --- ## 六、常见坑 | 现象 | 原因 | 处理 | |---|---|---| | 申请一直转圈/超时 | API 密钥权限不对或填错 | 核对 AccessKey,只给 DNS 权限 | | 手动 DNS 提示「记录未找到」 | TXT 还没生效 / 主机名填错 | `nslookup` 自查,确认是 `_acme-challenge` 而非 `@` | | 证书有了但网站打不开 | 运行目录不是 `/public` 或伪静态丢了 | 按「一、4」补齐 | | 浏览器红色「非安全」 | 页面里混用了 http 资源 | 后台/主题里图片、JS 改用相对或 https 地址 |