从10s到0.2s–个人博客提速简明手记

近期将博客从DigitalOcean迁移到Linode了,迁移完毕后顺便优化了下主机,效果很明显,访问速度从10s降低到0.2s,有图有真相:

Yslow的评分是95分!
以下是我的一些总结:
一.主机选择
1.地理位置–响应时间VS带宽
通常一个误区是新加坡、日本、香港的VPS速度要比美国快,但这里的只是因为地理位置接近而响应时间很快,也即ping显示数值小;但因为主机商的带宽提供各异和近几年国人对亚洲机房的蜂拥,在晚间访问速度并不一定比美国主机具有优势.
2.DNS
现在VPS厂商大都顺带提供域名解析服务,譬如linode的是nsX.linode.com;假如一个用户第一次访问你的博客,而假如他的本地宽带运营商没有缓存你的域名记录,解析就需到就需先到VPS提供商那,假如VPS提供商是海外的那解析时间还是比较长的;所以使用国内dns解析服务(如dnspod)可能是个比较好的提速选择.
3.虚拟化
一般OpenVZ的这种指令级虚拟化的提供商都会超卖,看起来实惠,其实很不稳定;KVM、XEN能较好的保证稳定性.

二.系统优化
1.系统选择
这没什么说的,Linux是标配了,windows用的少,也贵.
2.Linux优化相关
limits.conf和sysctl.conf里的nofile、nproc、vm.swappiness、vm.overcommit_memory等参数,具体配置要看实际运行情况.

三.Web优化
1.使用国内前端公共库
一些国外cms引用的字体、js库网址是海外的,所以获取速度;我博客之前打开速度奇慢主要就是对fonts.googleapi.com的漫长等待.一些国内良心厂商如百度360sinapp又拍云免费提供了常用前端公共库加速服务.
2.web server优化
KeepAlive、Gzip压缩、浏览器缓存、tcpfastopen、启用进程数等等很多了,一本书都讲不完.
3.图片相关
图片是影响网页打开速度的大头,因而优化图片至关重要.大部分博主应该是用现成cms,因而CSS合并贴图不太适用,但图片压缩确是一个可优化 点.Jpeg大部分情况下是最理想格式,但图片内有锐利图形(如截图屏幕)情况下png可能体积更小;值得一提的是png也可以有损压缩,我常用pngquant这个工具有损压缩png图片;Webp这个新星无论是无损还是有损都比png和Jpeg有优势,但目前只有chrome系的浏览器支持.
4.CDN
类似国外Cloudflare,国内很多厂商也提供适用博客的CDN加速服务,如百度加速乐360网站卫士安全宝,除了加速,CDN还能提供”网站永远在线”的效果;但使用CDN也可能因为CDN本身故障反而更慢和访问不了.
5.语言相关
编程语言、框架选择不同,相关优化也各不一样,这个要具体情况具体分析.

四.数据库优化
就和web server的优化一样,这部分知识也需要专门几本书来讲,在此不多讲.

五.更快速的远程连接
1.选择快速的ssh的加密算法
《The Secure Shell: The Definitive Guide》和orczhou的文章加速scp传输速度,都有对比不同加密算法的传输效率.
2.替换ssh–mosh
与基于tcp的ssh不同,mosh基于udp,但验证阶段还是得通过ssh来验证;一句话使用心得:用了mosh之后,现在连远程就像本地.
3.高效的梯子–shadowsocks
我的VPS除了用来写博客,附属(zhuyao)功能是用来当梯子,VPN杀伤范围太大,之前是用ssh建立本地隧道,现在使用shadowsocks,速度提升很明显;

六.安全
自从上次主机被挂马后,我就对安全也重视起来,毕竟都访问不了还谈什么提速优化,以下是我用的一些工具. 1.ssh登陆
我设为禁用root登陆、只允许key登陆、限制登录失败后的重试次数为3.
2.安全审计
Lynis
3.防火墙
Netfilter用法较难,它的封装APFshorewall相对人性化很多.
4.防暴利破解登陆口令
BFD denyhosts
Fail2ban
Sshguard
5.防DDOS
(D)DoS Deflate