本文属于零成本搭建现代博客指南[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
服务上,当用户请求https://www.bmpi.dev
,浏览器在解析过程中根据默认的配置找到了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])。
点击底部【阅读原文】即可访问博客(如果无法访问,也可在浏览器输入:https://www.bmpi.dev ),如果你所在的地区访问速度特别慢的话,可以留言告知我。
References
[1]
零成本搭建现代博客指南: https://www.bmpi.dev/series/零成本搭建现代博客指南/
[2]
构建我的被动收入: https://www.bmpi.dev/[3]
零成本搭建现代博客之加载速度优化篇: https://www.bmpi.dev/dev/guide-to-setup-blog-site-with-zero-cost-4/
[4]
Google PageSpeed Insights : https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fwww.bmpi.dev%2F&hl=en&tab=desktop[5]
BMPI.dev GitHub Repository: https://github.com/bmpi-dev/bmpi.dev[6]
Netlify: https://www.netlify.com/[7]
提升你的外国服务器网站国内访问速度: https://www.bilibili.com/read/cv4759943/[8]
三网GIA: https://zhuanlan.zhihu.com/p/68381011[9]
不能备案: http://xn--eqrt2g.xn--vuq861b/[10]
提升你的外国服务器网站国内访问速度: https://www.bilibili.com/read/cv4759943/[11]
高性能 Nginx HTTPS 调优 – 如何为 HTTPS 提速 30%: https://kalasearch.cn/blog/high-performance-nginx-tls-tuning/[12]
网站线路测速: https://www.17ce.com/[13]
阿里云CDN配置: https://help.aliyun.com/document_detail/109894.html