在我们遇到DDoS攻击,或是想要为网站的安全性“添砖加瓦”的时候,第一时间就会想到为网站接入Cloudflare。
然而,由于中国大陆地区的运营商有时会对Cloudflare的CDN节点进行谜之屏蔽的操作,而且免费版的CDN服务经常会分配到美国的节点,此时你再次打开测速网站,其结果很有可能会是下面这样↓
难道中国大陆地区真的不适合接入Cloudflare吗?
实则不然,其问题极大可能是缓存没有设置好。
我们需要先了解一下原理。
原理
缓存静态和动态内容 | 它是如何工作的? | Cloudflare
根据上面查阅到的官方文档可以分析,当我们的网站接入Cloudflare并开启“小黄云”时,Cloudflare只会对你的网站的JavaScript、CSS 文件等静态文件进行缓存,并不会对你的网站的静态HTML页面缓存。
你也可以按F12打开开发者工具,在“网络”一栏里观察Cf-Cache-Status的响应标头,若如图片一样显示的是DYNAMIC,即代表动态缓存,就如上文提到的一样,此时Cloudflare并不会对你的网站的静态HTML页面缓存。如果出现其他的字样,请对照下面的描述来分析。
Cf-Cache-Status:HIT此时你的文件已经命中缓存。若有用户访问你的网站会直接由CDN服务器响应,不会回源至源服务器。
Cf-Cache-Status:MISSCloudflare已经在CDN服务器中查找了你所请求的文件,但是并没有找到,这时候CDN服务器将会回源至你的服务器中获取该文件,当下次请求时该文件就会显示HIT。
Cf-Cache-Status: BYPASSCloudflare已经被用户设置不缓存该文件,请求将直接回源至源服务器。
Cf-Cache-Status:EXPIRED文件的缓存期限已经过期,请求将会再度回源至网站源服务器进行获取文件,当下次请求时该文件就会显示HIT。
这么来说的话,当访客想要访问你的某一页面,若未配置缓存其请求会通过CDN节点直接回源到你的源服务器,而不是在CDN节点返回已经缓存后的文件。这样一来的话,访问请求的距离会大大地增加,而且会极大地拖慢速度,尤其是针对中国大陆地区。
这时候,我们就要稍微修改一下页面规则,使Cloudflare对HTML页面进行缓存。
Cloudflare的缓存原理其实很简单,当用户首次请求你的网站某个页面时,请求会到达最近的 Cloudflare 边缘节点。该节点会向源服务器拉取数据,返回给用户的同时在边缘节点存储副本。
紧接着,当有另一位用户再次访问此页面的时候(缓存没有过期情况下),Cloudflare就会直接返回在边缘节点缓存的副本,从而无需经过你的源服务器。这样就可以有效地节省响应时间了。
操作
登录你的Cloudflare账户,进入你的域名,在边栏的规则选项中,找到页面规则子选项卡并进入。
Free计划默认页面规则只有三条,所以我们需要对WordPress进行分析来寻找最优解。需要特别注意的是wp-login和 wp-admin两个页面不能缓存,否则的话别人可以在未经你授权的境况下,使用CloudflareCDN的缓存页面直接进入到你的后台。其余页面就正常缓存即可。
由此,我们就可以得到以下配置方法:
请将上面的所有的www.lp-gardenwalk.top替换成你的域名。
这里尤其注意一下,页面规则的顺序需要和上图一样,因为Cloudflare默认是从第一条规则顺延到第二条规则,之后才是第三条规则。否则的话将会出现预料不到的错误。
但是此条规则有一条缺点,Cloudflare会自动对WordPress的文章预览页面进行缓存,如果遇到这个问题,请在边栏的缓存子选项卡的配置中下拉,找到开发模式打开即可。不要忘了在文章编辑完成后关闭开发模式。
在完成上面的操作后,你可以按F12打开开发者工具,在“网络”一栏里观察Cf-Cache-Status的响应标头,多刷新几次,若如图片一样显示的是HIT,即代表设置成功。
这样的话,你的网站的访问速度就会提升了不少。