说说本站自建 CDN 完整解决方案

小助手读文章 00:00 / 00:00

温馨提示:
本文所述内容不具普遍性,可能因操作环境差异而与实际有所出入,故请勿照搬照抄,仅供参考。

源站托管于国外主机,由于国内线路情况复杂,打开速度往往比较慢,难以均衡。鉴于手上还有其他家几台主机在吃灰,故考虑以 CDN 分流方式用上。

概况

主机位置路由情况
源站台湾电信、联通直连、移动绕美
备用 1香港电信、联通、移动直连
备用 2日本电信、联通直连,移动绕美
备用 3新加坡IPv4 全部绕美,IPv6 联通、移动直连

方案

替换 DNS

各主机位置、路由各有差异,故考虑替换域名默认 DNS,改为支持运营商、地域分别解析的 DNS,参考《如何选择 DNS 解析:支持运营商(EDNS)和地域(GeoDNS)的免费 DNS 解析服务 - 华为云云解析 DNS》。

节点同步

如果直接在各个主机都运行与源站相同的软件系统,并进行数据同步,效率不高,较浪费资源,故考虑改为 Nginx 反代的方式实现各节点数据同步,参考《利用 Nginx 反向代理和缓存功能自建及优化 CDN 加速节点详细教程》。

国外优化

虽然网站受众不一定是全球都有,但是主机仅位于香港、日本、新加坡,对除此外的地区如美国,访问依然没有改善,故考虑同步使用上 CloudFlare CDN,作为海外区域除上述地区的接入节点。

要使用 CloudFlare CDN 有两个方法。一个是将 DNS 托管于 CloudFlare,但 CloudFlare 不支持 EDNS 和 GeoDNS,所以这个方法排除;另一个是利用 CloudFlare 合作伙伴使用 CNAME 接入,这个方法可以指定优化 IP,故采用这个方法进行国外优化,参考《使用 CNAME 接入 CloudFlare 新玩法》;

分线解析

到这里,各节点都已经可以正常工作了,接下来要做的就是利用 DNS 就近分配节点,参考本站解析:

地区/线路解析类型解析节点
大陆_移动A备用 1
大陆_移动AAAA备用 3
大陆_电信A备用 2
大陆_联通A备用 2
大陆_联通AAAA备用 3
大陆_默认A备用 2
全球_香港A备用 1
全球_日本A备用 2
全球_新加坡A备用 3
全球_默认ACloudFlare
全球_默认AAAACloudFlare

解析优化

现在部分地区我们只分配了一个节点,一旦节点宕机将无法访问,所以根据节点情况可以多分配几个。比如 大陆_移动 线路,可以分配 CloudFlare 节点作为备用。

解析生效后,再使用 ChinaZ 站长之家的 ping 检测 来测试各地的访问情况,然后根据结果增加或修改解析。比如黑龙江联通对节点 备用 1 更友好,那么就可以增加 黑龙江_联通 备用 1 的解析。

题外话

细心的朋友可能已经发现,像这次自建 CDN 解决方案,其实相关文章都有提到过了,就看怎么整合在一起。比如在上述方案种,还可以使用 QUIC 协议优化连接开启 CDN 后保护源站 IP开启 TLSv1.3 支持 等等。所以不管是看本站文章,还是网上搜索,都应该带着想法有目的地看,这样可以收获到更多。


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 nginxcdn华为云建站经验方案 的文章

 本文最后更新于 2019/07/15 16:00:36,可能因经年累月而与现状有所差异

 引用转载请注明: VirCloud's Blog > 建站 > 说说本站自建 CDN 完整解决方案

精选评论

  1. 森屿博客
    森屿博客 回复

    Windows 7Chrome 59.0.3071.115来自 重庆 的大神

    我前面也自建了cdn 但是只有一个节点 而且又慢 索性就放弃了 icon_arrow.gif

    1. 欧文斯
    2. 欧文斯

      可以配合 CF 使用,国内用源站,国外用 CF

      1. lemon996
        lemon996 回复

        Windows 10Chrome 120.0.0.0来自 中国 的大神

        我也是这样想的但是不知道咋设置

        1. 欧文斯

          找一个支持分线路的 DNS 托管就行了

          1. lemon996
            lemon996 回复

            Windows 10Chrome 120.0.0.0来自 中国 的大神

            比如呢?

          2. lemon996
            lemon996 回复

            Windows 10Chrome 120.0.0.0来自 中国 的大神

            或者说有没有教程啥的

          3. 欧文斯

            这篇文章看下来了吗?方案里第一节就是讲这个 icon_razz.gif

  2. null
    null 回复

    Mac OS X 10_15_2Chrome 79.0.3945.88来自 广东 的大神

    icon_neutral.gif 楼主厉害!

  3. loser
    loser 回复

    Windows 10Chrome 84.0.4147.105来自 重庆 的大神

    主要是目前没有开源的CDN面板可用,不然自建绕过备案还是很爽的

  4. Ron
    Ron 回复

    Windows 10Chrome 108.0.0.0来自 火星 的大神

    有个问题,如果源站更新了数据,而反代节点又较多,怎么及时更新清除所有反代节点的缓存呢?

    手动挨个删除节点缓存比较麻烦,如果将缓存时间设置较短又会对源站造成太大压力

    1. 欧文斯

      这边需要注意的是,能称为缓存的,说明是更新频率很低的,如果是经常更新的资源,是不建议上缓存的。 icon_mrgreen.gif
      如果是必须要上的,那确实删除缓存比较麻烦。有个取巧的方法就是,每个资源的缓存删除链接是固定的,可以都加书签,然后利用浏览器多页签的功能,一次性打开这些链接来实现清除 icon_arrow.gif