
自建网站优化指南
本人维护了数十个网站和服务的经验,持续更新,尽量少说废话,在网络中的每一层都有优化,欢迎各位的补充
这边推荐一个云厂商 007IDC,它是轻雪所有业务(包括这个博客)的网络服务赞助商,并非广告
响应速度
这是用户体验上最为直观的东西,通常分为时延和速率带宽两部分。
本文默认网站是服务中国地区的。
时延 (Ping)
这是网络层和传输层上的优化
这个取决于你服务器的线路,因此选购服务器很关键,这是请求和响应速度的硬伤。大家常说的BGP,CN2都是一些体验比较好的线路,可以上网查询一下服务器线路推荐。不用关注其细节,只要你知道这些线路的机房访问速度很快就是了。
千万不要贪小便宜去买什么广播IP,辣鸡线路的机子。
速率及带宽 (Bandwidth)
这个加钱就行,在你的经费和速率上权衡一下。比如你要搭建一个个人博客,那么1-5Mbps是比较合适的,如果访问量比较大,那再适当提升带宽即可,毕竟大陆服务器的带宽跟金子一样贵。
此博客的单节点出口带宽在200Mbps左右(仅供参考)。
内容分发网络 (Content Delivery Network; CDN)
给网站选配CDN是一个能很大程度上优化网站访问速度的一个手段,甚至比上面两个更有用。但是它有一些限制。
一些常用的静态页面托管服务GitHub Pages,Vercel Pages,Cloudflare Pages,Liteyuki Pages等都有CDN加持。
优点:
将静态资源分发到区域中的大量CDN节点上,域名配合GEODNS,在用户客户端进行DNS查询时返回就近的资源服务器,显著降低用户访问的延迟。
CDN节点缓存静态资源,使得用户的请求不会都发往源服务器,节省源服务器的压力和流量费用(CDN的流量通常更便宜,带宽也更大)。
良好的CDN服务商节点有线路优化,在源服务器线路不好的情况下可以缓存补救一下。
保护源服务器的IP地址,能够很好抵御一般的网络入侵。
缺点:
好的CDN略贵,需要在价格和体验上权衡。
Cloudflare CDN对中国大陆的请求有减速效果,甚至不如直连。
因为缓存,服务器资产的同步可能不及时。
对服务端渲染(SSR)的网页来说不友好(例如基于PHP的WordPress),这玩意主要服务于静态资源。
CDN服务商提供的默认缓存策略不一定是最好的,通常可以自己配置,例如对于不可变资源,延长缓存时间;对于API请求,则全部回源。
有能力的朋友可以购置服务器自建CDN,我们现在用的是GoEdge自建CDN,由007IDC赞助的计算资源。
启用HTTP3及QUIC
到目前位置,HTTP3是超文本传输协议的最新版本,使用QUIC运行,QUIC又依赖于UDP而不是TCP,并且在传输层加密。其他细节可以自己去查阅,你只要知道相同的理想条件下HTTP3是比之前版本的HTTP快就行了。
H3传输层和应用层的优化,因此大多数CDN服务商(例如Cloudflare)都支持,如果是自己的云服务器只需要在web服务器软件(例如Nginx,Caddy)上查阅文档启用即可,最后记得放行443/udp。
启用OCSP Stapling
传统模式下,使用https时,浏览器每次连接都会向证书颁发机构(例如Let's Encrypt)的OCSP服务器查询证书是否被吊销,这显著增加了请求耗时。启用OCSP Stapling后,这件事由网站服务器完成,并且会在用户请求网站时直接把OCSP缓存发给客户端,从而省去客户端自行查询这一步。
启用也非常简单,常用的web服务器软件和CDN服务商配置项里面都可以打开。
杂项速度优化
还有很多选项可以优化网站速度,例如:
启用gzip压缩,降低传输的数据量。
启用内容优化,例如去除HTML中的空行,注释;缩短JavaScript的变量;去除CSS中的空白(取决于web服务器支持)。
媒体资源压缩后存放,例如图片可以转成webp添加到网站。
使用外部资源站,网站通过外链引用存放在其他资源服务器上的东西。
...
安全性
SSL/TLS
对网站启用https支持是很有必要的,你也不想网站被访问的时候,用户浏览器地址栏挂着一个『不安全』吧。这是一方面,最重要的是它保护了传输过程中的安全,确保传输的内容不会被中间人窃取。
证书自动化申请已经是基本操作了。大部分CDN后台和web服务器都支持配置ACME账户进行证书自动申请和续期,别再手动去配置证书啦,有DNS和http两种challenge方案,目的是为了确保签发机构能确认这个域名是你本人持有,由于DNS服务商和web服务器的不同,请查阅文档了解具体过程。
防人机
网站建好了,经常会收到一些莫名其妙的请求,可能是自动程序(通常说机器人)请求,当然也有很多手段可以对抗它们。
你在访问某些托管在Cloudflare代理上的网站时,可能会遇到提示让你点击一个东西,然后验证你不是机器人。这是因为你的环境异常,触发了Cloudflare Turnstile质询。
大部分CDN服务商都有类似的东西,比如GoEdge的五秒盾。单服务器的话,也可以接入第三方的质询验证服务。
有的是验证用户浏览器环境的完整性,有的是验证用户的请求来源和请求行为,能在一定程度上防止机器人。
User-Agent头部也是一个标识客户端的东西,不过这个可以伪造,意义不大。
来源IP,屏蔽掉常用的数据中心IP,自动程序大部分来自这些地方。至于个人用户让它爬一下也没什么。
搜索引擎也会抓取你的网站,这通常是有利的。
防攻击
DDoS、CC流量这些攻击基本上无解,属于是用蛮力在打,购买防御流量包也是治标不治本。但是这类攻击成本也不低,正常情况下只要网站没有触动别人的利益,不会遭受到大规模的攻击,总之就是别惹事。如果真的遇到了,那可以采取临时改解析(前提是源站IP没有泄露),或者关站等做法。
跨域资源共享 (Cross-Origin Resource Sharing; CORS)
这个只对浏览器生效,对自动程序无效,君子声明。假如有别人的域名对应的网站引用了你的域名对应的图片外链,你可以在服务器配置告诉它,我不能给你用引用这个资源,浏览器会出手。假如一个访问量很高的网站引用了你的资源,那么你也会损失很多流量。
详细请查看:CORS
XSS和CSRF
这些是web应用的开发者应该考虑的问题。也是老生常谈的问题了,防范方式之一就是用户输入不可信原则
内容优化
SEO优化
说白了就是提升网站在搜索引擎中的排名。这个看个人需求,如果你有曝光需求那还是值得优化一下的。提升文章内容质量,减少垃圾内容;提升链接在其他高权重的网站中出现的频率(例如友链交换);提高网站可访问性;做好sitemap等等。
首页白屏优化
白屏时间指用户从输入开始到网页内容渲染完成的时间。这个时间长短通常与用户留存率成反负相关。这通常与服务器网络(取决于服务商)和前端打包技术(面向开发者)有关。