按ESC键关闭
岚岚天空
首页
文章
心情随笔
技术杂谈
学习笔记
书签
关于
联系
岚岚天空
首页
文章
心情随笔
技术杂谈
学习笔记
书签
关于
联系
技术杂谈
域名接入 Cloudflare + 宝塔多站点 HTTPS 串站问题解决
岚岚天空
04月28日 16:49
5 min
2627 浏览
0 评论
# 实战记录:GoDaddy 域名接入 Cloudflare + 宝塔多站点 HTTPS 串站问题解决 ## 一、背景与目标 我有一个在 GoDaddy 注册的域名 `123456.com`,希望使用 Cloudflare 的 CDN 和安全防护,同时网站部署在阿里云服务器上,使用宝塔面板管理多个站点。本文记录了从域名迁移到解决 HTTPS 访问“串站”的完整过程。 ## 二、将 GoDaddy 域名接入 Cloudflare ### 2.1 核心思路:只改 DNS,不转移注册商 - 保留 GoDaddy 作为域名注册商 - 将域名的 **Nameservers(DNS 服务器)** 改为 Cloudflare 提供的地址 - 后续所有 DNS 解析都在 Cloudflare 管理 ### 2.2 操作步骤 #### 步骤1:在 Cloudflare 添加站点 1. 登录 Cloudflare 仪表盘,点击“添加站点” 2. 输入你的根域名(如 `123456.com`),选择 **Free** 套餐 3. 等待系统自动扫描原有的 DNS 记录(可手动核对补充) #### 步骤2:在 GoDaddy 修改 Nameservers 1. 登录 GoDaddy,进入“域名管理” 2. 找到目标域名,点击 **DNS** → **Nameservers** 3. 改为 **自定义**,填入 Cloudflare 提供的两个地址(格式:`xxx.ns.cloudflare.com`) 4. 保存并确认 #### 步骤3:等待生效(1~24 小时) - Cloudflare 仪表盘状态从 **Pending** 变为 **Active** 即代表接管成功 - 可执行 `dig NS 123456.com` 验证返回是否为 Cloudflare 的 NS #### 步骤4:在 Cloudflare 配置 DNS 并开启代理 - 进入 Cloudflare **DNS** 选项卡 - 添加/修改解析记录(A、CNAME、MX 等) - 将需要加速的记录右侧 **云朵图标** 点成 **橙色**(Proxied)→ 开启 CDN ### 2.3 重要提醒 - **后续所有解析记录的增删改,都必须去 Cloudflare 操作**,GoDaddy 的 DNS 管理页面已不再生效 - 不要在 GoDaddy 上再修改任何 DNS 记录,除非你打算把 NS 改回去 --- ## 三、遇到的问题:访问根路径时“串站” ### 3.1 现象描述 - 访问 `https://www.123456.com/index.html` → **正常**,显示正确的网站 - 访问 `https://www.123456.com` 或 `https://123456.com` → **跳转到服务器上其他站点**(错误的网站内容) ### 3.2 原因分析 这是宝塔面板(Nginx)多站点环境下的典型问题: 1. **Nginx 的 `default_server` 机制**:当一个请求的域名(`Host` 头)与所有 `server_name` 都不完全匹配时,会交给默认站点处理。 2. **HTTPS 的敏感性**:`123456.com` 与 `www.123456.com` 在 Nginx 中被视为两个不同的域名。如果 B 站点(串到的站)没有配置 HTTPS 或证书不匹配,Nginx 会“降级”匹配到第一个加载的 HTTPS 站点。 3. **根本原因**:访问根路径时,Nginx 对 `Host` 头的匹配要求严格,而你的站点中 `123456.com` 缺少唯一且有效的 SSL 绑定,导致被错误路由。 --- ## 四、解决方案:根治串站问题 ### 4.1 优先方案:为所有站点配置 SSL 并开启强制 HTTPS(最有效) 在宝塔面板中: 1. **为每一个站点**(包括那个串过去的 B 站点)都申请免费 SSL 证书(Let's Encrypt) 2. **勾选“强制 HTTPS”**,使所有 HTTP 请求自动跳转到 HTTPS 3. 重启 Nginx 或 PHP 服务 > **为什么有效**:这样保证了每个站点在 443 端口都有唯一、有效的证书和配置,Nginx 可以准确识别不同域名,不再发生路由混乱。 ### 4.2 备用方案:调整默认站点(如果方案一无效) 1. 在宝塔面板 → **网站** 模块 2. 找到你希望作为默认的站点(即 `123456.com`) 3. 点击“设置” → **默认站点** → “设为默认站点” 4. 重启 Nginx ### 4.3 验证方法 - 清除浏览器缓存,或用隐私模式访问 `https://123456.com` - 在宝塔中确认 `123456.com` 和 `www.123456.com` 都已添加到该站点的“域名管理”列表中 - 若还不行,检查 Nginx 配置文件(`/www/server/panel/vhost/nginx/`),但通常上述步骤已足够 --- ## 五、关于 Cloudflare 与宝塔“双证书”的澄清 ### 5.1 是否存在冲突? **没有冲突,它们分工明确,相互配合。** | 证书/模式 | 位置 | 作用 | |----------|------|------| | Cloudflare 边缘证书 | 访客 ↔ CF 节点 | 公网加密,自动提供 | | 宝塔 Let's Encrypt 证书 | CF 节点 ↔ 源站服务器 | 后端加密,你手动申请 | | CF SSL/TLS 模式 = **完全(Full)** | 工作模式 | 强制 CF 以 HTTPS 连接源站,并使用你安装的宝塔证书 | ### 5.2 正确工作流程 1. 访客访问 `https://123456.com`,浏览器信任 CF 边缘证书 2. CF 收到请求,按照 **Full** 模式,向你的源站发起 HTTPS 连接 3. 源站 Nginx 验证宝塔证书有效且域名匹配 → 通过 4. Nginx 返回正确的内容,CF 加密回传访客 ### 5.3 为什么这是解决串站的关键 你之前访问根路径串站,正是因为 CF 到源站这一段 HTTPS 没有明确匹配到 `123456.com` 这个站点。现在你为所有站点统一配置了宝塔 SSL 证书,CF 的 Full 模式得以正确识别每个域名的证书,从而根治了串站。 --- ## 六、最终状态与建议 ### 6.1 推荐配置组合 - **DNS 解析**:Cloudflare 管理(NS 指向 CF) - **源站**:宝塔面板 + Nginx - **SSL 证书**:宝塔申请 Let's Encrypt(所有站点都申请并开启强制 HTTPS) - **Cloudflare SSL/TLS 模式**:**完全(Full)** 或 **完全(严格)** - **CDN 代理**:需要加速的记录开启橙色云朵 ### 6.2 日常维护提醒 - 证书续期:宝塔会自动续期 Let's Encrypt,无需干预 - DNS 修改:只在 Cloudflare 操作 - 新增站点:记得同时配置宝塔 SSL 和 Cloudflare DNS,并测试根路径访问是否正常 --- ## 七、常见问题速查表 | 现象 | 可能原因 | 解决办法 | |------|----------|----------| | 域名解析不生效 | NS 未修改或未生效 | 检查 GoDaddy NS 是否为 CF 地址,等待生效 | | 网站无法访问,提示 SSL 错误 | CF 模式为 Flexible 但源站未开启 HTTPS | 改为 Full 模式,并确保源站有有效证书 | | 访问根路径串站 | 部分站点未配置 HTTPS / 默认站点设置不当 | 为所有站点申请 SSL + 强制 HTTPS | | 访问 `index.html` 正常,根路径异常 | 同上 | 同上 | | 重定向次数过多 | CF 模式 Flexible + 源站强制 HTTPS | 改为 Full 或 Full (strict) | --- > **总结一句话**:Godaddy 域名接入 Cloudflare 需要改 NS;解析后续全在 CF 操作;宝塔多站点访问根路径串站,只需为所有站点统一申请 SSL 并开启强制 HTTPS,配合 CF 的 Full 模式即可完美解决。 **本文档基于真实排错过程整理,希望对遇到类似问题的你有帮助。**
Share this:
上一篇
Docker & Docker Compose 常用命令参考
下一篇
七牛云资源防盗链与流量优化终极指南:从原理到实战