大山在 Github 上找到了一个套壳项目,很快把这个套壳网站给部署好了,但很快就发现了问题,因为国内直接调 ChatGPT 官网的 api 也是需要科学上网的,这样的话用户得科学上网才能访问 OpenAI 的 api,这与实际的需求不符(国内用户 99% 不懂科学上网)
眼看着交付日期临近,大山急忙向 CTO Tony 求助,Tony 听了大山的汇报,心平气和地说了一句话
大山恍然大悟,于是立即动手先在 vercel.com(可以简单理解为一个免费高效的 Web 应用部署平台)上部署了一个访问 OpenAI api 的应用,然后国内的请求先访问这个应用,应用再访问 OpenAI api,打算通过这样的方式来实现间接访问 OpenAI api 的效果
然而理想很丰满,现实很骨感,国内无法访问 vercel 上的应用
大山心想主要问题在于国内无法访问 vercel,那我是不是可以找一个代理服务器,只要国内能访问,它也能访问 OpenAI,不就行了,比如香港的服务器就满足需求,于是就把自己的想法给 Tony 提了一下
Tony 笑了一下:使用代理服务器确实可以,但其实国内也有办法访问 vercel 的,可以使用 CNAME 哦
「CNAME,这是啥,之前从未听说过呢」大山困惑道
Tony 看大山对 CNAME 确实一无所知,于是给他科普起了域名解析:
我们知道域名是为了方便人类记忆的,计算机只认 IP 的,任何一个域名都要被解析成 IP 地址才能访问,为了表示域名和其对应的 IP 的关系,我们在 DNS 后台可以填上一条记录来记录域名和 IP 的关系,如下:
example.com | record type | value | TTL | @ | A | 192.0.2.1 | 14400 |
一. 多个应用部署在同一台机器上的场景
二. CDN 使用
如果你用 A 记录显示不合适,因为 A 记录是记录域名与 IP 的关系,无论你填哪个地区的 IP,DNS 都无法把就近的 IP 返回给你
此时 CNAME 就派上用场了,我用 CNAME 让 b1.example.com 指向一个 DNS 调度器,这样的话每次访问请求先打到这个调度器,然后再由节点调度器根据请求的 IP 来判断它来自哪个地区的
进而调度器就可以把离这个 IP 就近的 CDN 节点 IP 返回给请求方,然后就可以从这个就近的 CDN 节点拉取内容了,完整的 CDN 请求链路如下
搞完之后普通用户果然能访问 OpenAI api 啦
|