查看原文
其他

零成本搭建现代博客之优化国内访问速度

Dawei Ma improve365 2023-03-13

本文属于零成本搭建现代博客指南[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加速。如下图所示,HTTPSTLS的加解密是个耗时的过程,更不要说浏览器还需要校验证书的合法性。在这篇高性能 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

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存