本文属于零成本搭建现代博客指南[1]系列第五篇《优化国内访问速度篇》。
构建我的被动收入[2]网站部署在Netlify CDN上,我在[3]这篇文章中对它做了大量的基础技术性加载速度优化。最终达到在Google PageSpeed Insights[4]上PC端98分的评分:
但是由于Netlify CDN在国内的访问速度并不好,导致国内用户访问速度非常的慢,甚至不可用。为了优化国内的访问速度,需要通过CDN给国内用户加速。
博客架构
为了更好的分析这个问题,我画了本博客的网络架构图:
优化前
•Step 1.1: 本地写完文章后,推送到BMPI.dev GitHub Repository[5]。•Step 1.2:Netlify[6]在检测到GitHub推送的Commit后,触发Deploy流水线,把此次变更发布自动上线。
•Step 2.1: 本博客的DNS解析托管在AWS Route53服务上,当用户请求,浏览器在解析过程中根据默认的配置找到了Netlify CDN地址,最终获取到了网站内容。
问题分析
国内用户访问网站慢的原因是,国内电信出口链路到Netlify CDN最近的边缘节点(新加坡digitalocean)延迟高,可能是其节点对国内链路没有做优化。
如果能使用支持国内网络的CDN或针对国内链路做优化的国际CDN,则能提高国内用户的访问加载速度,根据这篇提升你的外国服务器网站国内访问速度[7]里提到的:
利用阿里云海外CDN,中国访客大部分会解析到亚太一区节点,而亚太一区CDN节点到中国大陆的线路大部分都经过了优化(香港节点和新加坡节点为三网GIA[8]),而节点到源站服务器的线路又没有经过我国运营商国际出口,没有审查所以速度本来就不会太慢。
那么可以通过给网站配置阿里云CDN,在AWS Route53配置基于地理位置的DNS路由策略,将国内的请求转发至阿里云CDN,将国外的请求转发至Netlify CDN。如下图的DNS配置:
考虑到备案的复杂性(内容审查及流程繁琐),我使用了阿里云CDN全球(不含中国)的加速配置(只要加速地区包含中国,所加速的域名必须做备案,但是本博客的域名托管至国外且顶级域名为dev,这种小众域名在国内还不能备案[9]),国内用户的请求最终由阿里云新加坡节点服务,而阿里云新加坡的节点到国内相比Netlify CDN是做过链路优化的。
优化后
如博客架构图所示,加入了红框中的Step 2.3后,我们可以基于DNS路由策略将不同区域的用户请求转发至不同的CDN。
优化过程
1.配置阿里云CDN。具体过程见提升你的外国服务器网站国内访问速度[10]。必须注意加速域名不能和源站域名相同,所以需要在Netlify上重新部署一个相同的网站(网址不同)作为CDN源站,同时需要考虑屏蔽爬虫爬取CDN源站,防止内容重复。考虑到此网址未公开,搜索引擎无法通过其他网址爬取此网址,所以不做爬虫屏蔽也可以。
2.需要在DNS配置基于位置的路由策略。中国区流量分配至阿里云CDN,其他默认流量分配给Netlify CDN。 3.HTTPS证书。需手动在阿里云上申请免费证书给CDN域名使用,同时下载此证书配置给Netlify使用。过期前需要重新申请证书并更新。 4.HTTPS加速。如下图所示,HTTPS中TLS的加解密是个耗时的过程,更不要说浏览器还需要校验证书的合法性。在这篇高性能 Nginx HTTPS 调优 - 如何为 HTTPS 提速 30%[11]中,提到了一些优化HTTPS的手段,这些优化的设置在阿里云CDN中都可以设置。
•开启HTTP/2: HTTP/2 中可以在一个连接中进行并行多个请求。•调整Cipher优先级: 尽量挑选更新更快的 Cipher,有助于减少延迟。•启用OCSP Stapling: 忽略证书验证,能加快与网站连接速度。•调整ssl_buffer_size: 如果是Rest API服务器,则有必要调整小此值。•启用SSL Session缓存: 启用SSL Session缓存可以大大减少TLS的反复验证,减少TLS握手的 roundtrip。
在阿里云CDN中可做如下设置优化:
5.测试不同地区用户访问的CDN:
如果响应头里看到server: Netlify,则请求是到Netlify CDN的。
如果看到server: Tengine,则请求是到阿里云CDN的。
6.网站线路测速[12]:
看起来国内不同地区访问速度相差还是挺大的,考虑到测速网站本身的机房网络问题,与实际用户访问的速度差异估计不同。
阿里云CDN国内用户访问不同地区的平均响应时间:
总结
经过此番优化,最终本站获得了如下的优势:
•网站源内容在国外CDN托管;•域名在国外AWS Route53托管;•网站无需备案与内容审查;•国内用户请求至阿里云新加坡CDN,国外用户直接请求至Netlify CDN;•爬虫不会受到影响,经测速百度爬虫请求的还是Netlify CDN;•双站部署对SEO没有影响,阿里云CDN请求的Netlify源站网址没有公开,不会被爬虫爬取到;•HTTPS加速(通过阿里云CDN配置[13])。
点击底部【阅读原文】即可访问博客(如果无法访问,也可在浏览器输入: ),如果你所在的地区访问速度特别慢的话,可以留言告知我。
References
[1]零成本搭建现代博客指南:/series/零成本搭建现代博客指南/
[2]构建我的被动收入:
[3]零成本搭建现代博客之加载速度优化篇:/dev/guide-to-setup-blog-site-with-zero-cost-4/
[4]Google PageSpeed Insights :%3A%2F%2F%2F&hl=en&tab=desktop
[5]BMPI.dev GitHub Repository:
[6]Netlify:
[7]提升你的外国服务器网站国内访问速度:
[8]三网GIA:
[9]不能备案:
[10]提升你的外国服务器网站国内访问速度:
[11]高性能 Nginx HTTPS 调优 - 如何为 HTTPS 提速 30%:
[12]网站线路测速:
[13]阿里云CDN配置: