需求

我们的站点以中文为主,且服务器地址也位于中国,面向的访客也主要是国内,所以面向国内的CDN一定是要使用的,但同时我们也想要国外的用户也能达到加速的效果,这将如何实现呢?

没错,就是分地域的DNS解析!

一般情况下,DNSPod提供的免费版解析就能够根据境内外提供不同的DNS解析记录,但如果想要细分到大洲,就需要购买价格较为昂贵的企业版DNS解析。前几天我在看云厂商价格的时候,发现了https://www.volcengine.com/这家云服务厂商(我猜应该是字节跳动旗下的),他们家的DNS解析服务企业版价格也才15元/年(详细区别见如下链接)

https://www.volcengine.com/docs/6758/170354

简而言之,可以按照以下精度进行不同地域的不同DNS解析。

  • 运营商线路:中国内地细分运营商,包括电信、联通、移动、教育网、广电网,细分大区/省份。

  • 地理位置线路:中国内地细分大区/省份、全球(不含中国内地)细分大洲/国家或地区。

  • 云厂商线路:阿里云、腾讯云、百度云、华为云、火山引擎。

  • 线路分组:允许您添加企业版支持的全部运营商线路、地理位置线路和云厂商线路。

设置解析

登录火山引擎控制台,在搜索框中搜索DNS,进入TrafficRoute DNS套件,添加域名,进行TXT记录验证

Snipaste_2024-07-30_21-50-14.jpg

添加完之后,更改这个域名的NS记录到提供的地址,完成这些,等待约10分钟就会生效。

选择CDN服务商

CDN的提供商数不胜数,依据自己的喜好选择就好。这里作为演示,我将使用https://jitucdn.com/https://aws.amazon.com/cn/cloudfront/作演示。

首先,我们需要注册平台的相应账号,这里不作演示。其中JITUCDN在实名认证之后每个月会送30G的流量,CLOUDFRONT会送1TB流量和1千万次HTTPS请求,由于JITUCDN是国内厂商,所以要求实名认证以及备案的网站。

AWS提供的免费额度

Cloudfront的注册稍麻烦,需要一张外币卡且有被风控风险,这里推荐谨慎使用。

CDN的设置

接下来,我们以JITUCDN为例接入站点。

源站的配置

这里我们需要先解析一个不会被别人知道的域名到网站的服务器上,例如secret-backend.yoursite.xxx,解析过后在你的网站配置文件将其加入监听并配置SSL证书,确保在浏览器输入此地址可以进入网站。

JITUCDN

首先,打开首页:https://jitucdn.com/domain-list,点击添加域名,

在此,加速域名填入你想要用户访问的地址,例如blog.yoursite.xxx加速类型选择网站加速,覆盖范围选择中国大陆,源站配置这里我们选择域名源站,并将刚才的secret-backend.yoursite.xxx填入,保存之后点击创建

源站配置这里这样填

回源方式

HTTPS配置,这里你需要上传你自己的证书,或者选择免费的Let's Encrypt的免费的证书

在高级配置这里,加入上图所示的HTTP Header

都设置完成以后,回到基本配置这里,将CNAME的值复制。

Snipaste_2024-07-30_22-14-22.jpg

前往DNS解析控制台,添加这样的DNS解析记录:

完成后就会生效

分享一个可以在页脚显示命中CDN名称及服务器的小插件:

<script type="text/javascript" src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js"></script>

<script>
$.ajax({
  url: "/",
  method: "GET",
  success: function(data, status, xhr) {
    let cdnoffer = xhr.getResponseHeader("CDN-Offer");
    let cdnserverjitu = xhr.getResponseHeader("Ohc-Cache-Hit");
    let cdnserverfast = xhr.getResponseHeader("x-served-by");
    let cdnserverfront = xhr.getResponseHeader("x-amz-cf-pop");
    let cdnserverbunny = xhr.getResponseHeader("Server");
    
    document.getElementById("cdnoffer").innerHTML = cdnoffer;
    document.getElementById("cdnserverjitu").innerHTML = cdnserverjitu;
    document.getElementById("cdnserverfast").innerHTML = cdnserverfast;
    
document.getElementById("cdnserverfront").innerHTML = cdnserverfront;

document.getElementById("cdnserverbunny").innerHTML = cdnserverbunny;
  }
});
</script>
<p>当前CDN提供商:<span id="cdnoffer"></span><br>命中CDN节点:<span id="cdnserverjitu"></span><span id="cdnserverfast"></span><span id="cdnserverfront"></span><br>CDN服务器:<span id="cdnserverbunny"></span></p>

这里杂糅了很多我其他CDN的响应头,删掉就好。

linux学习中