如何做一个应用同时服务海内外的用户

大家都知道国内网络限制的原因,如果要做一个 Web 应用需要同时服务于国内用户或者海外用户,一般来说有两种方法。

方法一,在国内和海外同时部署两套应用,分别服务于国内和海外的用户。这个是最常见,也是最普遍的方式。

方法二,在海外部署一套应用,然后使用支持国内 CDN 加速的服务商(只有少部分的海外 CDN 加速服务商支持,所以大家在选择的时候,要注意挑选一下),绕开国内的防火墙,从而使得国内的用户也能够进行使用。

需要注意一点的是:如果使用国内 的 CDN 加速服务商,是需要 ICP 备案。这个整个流程大概需要一周左右吧。我之前走过一次全流程。

我选择的第二个方法。我使用的 赛博佛祖 的 Cloudflare,原因有两个,首先最重要的支持国内的 CDN 加速。其次对于他们提供的免费计划,对于我来说完全够用了。

我的情况

我自己做了小产品,现在是部署在 vercel 上。部署在 vercel 上,也就意味着在国内的用户如果不使用魔法 🧙♀️ 或者梯子 🪜,实际上是访问不了这个应用的。

如何配置 Cloudflare 的 CDN 服务

如果想要使用 Cloudflare 的 CDN 服务。大概要经历以下四步。

第一步:购买域名

注册一个域名。Vercel 提供的域名,是不能通过 Cloudflare 进行 CDN 配置。因为 Cloudflare 要求添加到其平台的域名必须是你自己拥有并能管理 DNS 解析的域名。我是在 namesilo 上购买的域名,这个网站是以廉价域名而著称的网站。所以想要购买便宜的域名的话,建议在这个网站上进行购买,对了,这个网站支持支付宝购买。我本来需要的域名大概只需要 2 美元,结果买域名的时候,不小心买错了,结果又花了 2 美元 重新买了一个。所以域名一共花了 4 美元$。

第二步:Cloudflare 进行 DNS 配置

  1. 在 Cloudflare 进行账号注册,并登录 Cloudflare 后台,然后添加自己刚刚买的域名。

img

  1. 这里可以直接选择它的默认选项,点击继续。

img

  1. 直接选择 Free Plan,对于我们这种刚刚起步的 web 应用,基本上够用了。

img

  1. 开始添加 DNS 记录。

img

关于 DNS 添加的小知识点:选择 DNS 记录的类型,不同的类型承载不同的解析逻辑。

以下是 DNS 各记录类型的核心信息汇总表:

类型名称 核心作用 典型场景 是否依赖 DNSSEC
A 将域名解析到 IPv4 地址 网站、服务器等域名 →IPv4 的基础解析
AAAA 将域名解析到 IPv6 地址 支持 IPv6 网络的域名解析(如 IPv6-only 服务器)
CAA 指定允许为域名颁发 SSL 证书的机构 增强 SSL 证书安全性,防止非法机构颁发证书
CERT 存储公钥基础设施(PKI)相关的证书 / 公钥信息 证书验证、公钥分发等 PKI 场景
CNAME 为域名设置 “别名”(将一个域名指向另一个域名) 子域名别名(如www.example.com指向example.com)
DNSKEY 存储 DNSSEC 的公钥,用于验证 DNS 记录的完整性与真实性 DNSSEC 体系中 “验证 DNS 记录未被篡改”
DS 在父域名中存储子域名的 DNSSEC 公钥信息,实现子域 DNSSEC 验证委托 DNSSEC 体系中子域与父域的安全层级验证
HTTPS 专门用于 HTTPS 服务的配置绑定,关联域名与 TLS 参数(加密公钥、协议版本等) 加速 HTTPS 连接、加密 SNI(服务器名称指示)、支持 HTTP/3 否(部分高级功能依赖公钥)
LOC 存储域名对应的物理地理位置信息(纬度、经度、海拔等) 紧急救援、物流追踪等需地理定位的特殊场景
MX 指定接收域名电子邮件的邮件服务器地址(支持优先级,实现容灾) 企业 / 个人邮箱的邮件路由(如@example.com 的邮件服务器)
NAPTR 用于服务发现与协议转换(如 SIP、XMPP 等协议) VOIP 电话、即时通讯的自动服务器发现
NS 标识域名的权威 DNS 服务器(负责解析该域名的服务器) DNS 层级解析的核心(定位域名的解析服务器)
PTR 实现反向 DNS 解析(将 IP 地址映射为域名) 邮件服务器 IP 信誉验证、网络设备身份识别
SMIMEA 关联电子邮件地址与 S/MIME 证书(或公钥),验证邮件发件人身份 企业级安全邮件通信(如政府、金融行业)
SRV 定位提供特定服务的服务器,包含服务类型、端口、权重、优先级 微软 Active Directory、即时通讯的服务发现
SSHFP 存储 SSH 服务器公钥的指纹(SHA-1/SHA-256),验证服务器身份 企业内部 SSH 服务器集群的身份验证(防中间人攻击)
SVCB 通用的服务绑定记录,关联域名与服务参数(IP、TLS 配置、协议版本等) 替代 CNAME、优化 HTTPS 连接、多协议服务发现
TLSA 属于 DANE 体系,存储 TLS 证书的哈希值,验证服务器 TLS 证书 自签名证书安全验证、减少对传统 CA 的依赖
TXT 存储任意文本信息,用途广泛 域名所有权验证、邮件防垃圾(SPF/DKIM)、DNSSEC 辅助记录 部分场景(如 DNSSEC 相关)
URI 将域名解析为 URI(如https://example.com/path),支持优先级与权重 简化客户端对复杂资源的访问(如 API Endpoint 发现)

因为我是使用的 vercel 进行部署的,因而我们知道 vercel 的访问域名。因为我希望用户能够通过比如 xxx.com 或者 www.xxx.com 访问我的网站。因此,在这里我只需要配置两个 DNS 即可。

  • 类型选择 CNAME, 名称填写 @ ,IPv4 地址就填写 vercel 的访问域名即可:myname.vercel.app。
  • 类型选择 CNAME,名称填写 www, IP4 填写和上面同样的内容即可。

img

  1. 点击继续前往激活。然后按照它描述的步骤,更新我的名称服务器,并且复制 Cloudflare 名称服务器。

img

第三步:更新 NameServers

  1. 再次回到 namesilo 的后台,点击 Domain Manager

img

  1. 点击需要更新的域名。

img

  1. 点击 Quick Settings,将 Cloudflare 名称的 NameServers

img

  1. 切换到 DNS 的 tab 页面,然后往下滑,确保 DNSSEC 关掉。如果没有关掉,则点击关掉。

img

img

截止到目前这一步,已经完成对 NameServers 的更新。且已经完成大部分的工作。

最后一步:在 Vercel 上添加我的域名

  1. 登录 Vercel 后台,点击需要更新的项目,进入到项目的设置页面。

img

  1. 从 overview 标签页,点击 Domains,添加新买的域名。

img

img

  1. 如果域名下面有 Proxy Detected 的标签显示,基本上到此就算是配置成功了。

img

然后你现在应该可以在国内,不使用魔法 🧙♀️ 或者梯子 🪜 通过这个新域名进行访问了 🎉。