网站建设

全站启用SSL之后,如何兼容不支持https抓取的搜索引擎?

还是在今年5月份,百度就跳出来,宣布成为国内首个支持https的搜索引擎,结果呢?呵呵... 一、案例 ①、抓取诊断 全站开启并强制https之后,在百度站长平台使用抓取诊断发现,其实百度并不会识别强制跳转的301状态,至少不会友好的反馈给用户: 抓取并没有出现跳转提示: 其实,后台日志显示是正常的301跳转: ②、真是打脸 2017年05月25日更新:偶尔进入站长平台看了一把,居然给我博客自动做了https认证,然后去百度搜索site了一把我的网站,基本已全部换成了https,看来百度对https的收录已全面展开! 百度发公告说,已全面支持https,并推荐各个网站开启https,得到优先展示,结果呢? 我们先百度site一下www.baidu.com,然后复制收录里面的链接: http://www.baidu.com/link?url=f3Fbk5cL6W_Hz0jtf6JY991vn1teNTzZ1WBHaqnOmCO&wd=&eqid=aab2bf1f0009872d000000055687e679 然后用网页内容抓取工具看下百度收录自己的是什么: 真是呵呵了,自己收录自己的也是http,说好的https呢?你5月份就发公告支持了,这大半年了自己对自己的收录都没更新过来,何况其他网站?? 其实,要看百度对自己的收录是否是https还有一种更简单的方法:直接在百度搜索https://www.baidu.com即可: 再次呵呵下。。。 ③、配套设施缺憾 百度搜索确实是全站启用了https,可你的配套设施呢??搞了半天,也就是百度搜索支持了https,百度的其他产品几乎都不支持! 比如,做网站喜欢用到的百度分享,不支持https,还得自行处理【相关文章】; 比如,大部分网站的经济来源,百度广告不支持https,搞个蛋哟; 还好,百度统计还能凑合用下,不是那么一无是处。。。 二、正能量 国内各个搜索引擎都看了下,结果意外的发现搜狗居然已经正常收录我博客的https了: 其他基本都未收录,而国外的几个搜索引擎基本不用看,换https数日之后就全局替换成https收录了,而且目测给了更好的排名,比如谷歌、必应等。 百度一直以来都是蜗牛般的反应,真不知是技术不行还是故意设置的?百度的索引服务器再多能多过谷歌?全局刷新一下感觉如登天一般麻烦! 三、解决 吐槽了那么多,还是来说说如何缓解一下各种不支持的窘迫吧! 支持https的有:谷歌、必应、搜狗、百度(持怀疑态度)以及用户 不支持的有:    360、神马(宜搜)以及百度(有待验证)等 那我们全站强制https就行不通了,必须对这些来路做规则判断,然后针对性的跳转或不跳转才行。 只分享下Nginx的做法,其他就自行参考研究吧! ①、http和https不在同一个server模块的做法: Ps:分别监听80和443端口是大部分网站的做法。 在监听80的server模块中添加如下规则: ②、http和https在同一个server模块的做法(注意修改实际域名): 最后,重载或重启nginx即可生效。 简单解释下:若不是百度、360或神马蜘蛛进行的http协议请求,将全部跳转到https。即强制https对360、百度、神马开了白名单模式,不强制跳转。规则是通用的,你可以把第一条规则中的UA标识换成任意不想强制跳转的请求源。 时间有限,就分享这么多了,希望各大搜索引擎尽快兼容https,希望百度搜索的联动反应能快点,而且不行就别再打肿脸充胖子,要对得起国内搜索第一的地位! 2016/01/05 内容补充:早上看到了WP酷的分享,才拍脑袋想起还有XP系统不支持SNI,导致网页无法打开,所以上述新增的规则可以改成如下代码: 场景①适用: 场景②适用: 2016/01/09 内容补充:突然想到,既然要兼容那些不支持的请求者,那么当请求到https时,是不是应该跳回http呢? 比如,使用XP系统访问到了http,我们可以不跳转到https,但我们全站都是改造成https的,所以页面内的链接都是https的,那他进一步还是不能访问! 所以,继续加规则,如果是特殊用户,则强制http访问: ①、http和https不在同一个server模块的做法: Ps:分别监听80和443端口是大部分网站的做法。 在监听80的server模块中添加如下规则: ②、http和https在同一个server模块的做法(注意修改实际域名): 最后,重载或重启nginx即可生效。
阅读全文
网站建设

分享一个支持https的CDN及启用SSL后续问题汇总

之前张戈博客全站启用了https,并分享了相关经验心得。用了一段时间,问题还是不少,所以继续整上一篇文章,汇总一下网站启用https之后出现的问题以及解决办法。 在分享这些问题之前,我先分享一个国内支持https的CDN,让个人博客也能无忧启用https,而不暴露真实IP。 我现在用的是腾讯云内测的支持https的CDN,其他人也就暂时用不了。本以为国内基本就没有其他支持https的CDN了,结果晓庄等几个博主留言分享了一个支持https的CDN——VeryCloud。 周末抽空了解并试用了下,发现真不错!而且还有每月免费50G的额度,一般个人博客基本够用了。 一、云端CDN ①、注册开通 首先,我们在VeryCloud注册帐号并开通云分发:https://www.verycloud.cn/ ②、添加证书 我们是冲着https去的,所以第一件事我们先要申请一个免费的SSL证书!当然,张戈博客之前也分享过沃通的免费证书申请地址,所以有需要的朋友先前往申请下: 分享一个免费SSL证书申请网站,给网站开启https协议 Ps:沃通免费证书最近又开放了2年多域名版本,申请时建议把主域名二级域名啥的一并申请到一个证书里(一次最多6个,含www主域)。 现在沃通申请证书基本可以站立得,所以我们可以立马下载到证书包。 解压,取得其中for Nginx的证书,然后在云分发控制台的【证书管理】中新建证书: 如图,输入一个自定义能识别的名称,然后依次上传crt和key文件,并确定即可!CA机构证书的话,免费证书是没有了,至少沃通免费证书绝没有。。。所以忽略吧! ③、添加网站 注册并登陆VeryCloud云端网络之后,启用云分发,并前往云分发控制台的频道管理界面添加新域名 因为我们的目的是要在开启https之后保护IP不泄露,所以我们必须把所有要展示的域名都加进去,比如博客主域名: 如图,基本只要按中文提示填写即可,其中如果源站没有开启强制https那么可以填写80,而源站要是开启了http强制跳转https的话,那就必须填写443端口,否则CDN会经常异常! 我博客主域名开启了强制https,所以我填写了443端口,二级静态域名没有开启,所以我填写80,区别是填写80能略微降低CDN抓取源站造成的压力。毕竟http还是比https略微费服务器一点! 下面的探测URL就随便填写一个网站存在的地址吧,比如我填写的是ico图标地址。 继续下一步,是设置缓存: 这个可以参考一下张戈博客之前的文章: 如何正确配置CDN高速缓存,避免越用越慢的尴尬 特别注意的是,其中有个静态页面,指的是html、htm和shtml这类页面,一般博客都做了伪静态,所以如果不需要缓存html伪静态页面,请使用自定义或遵循源站,自定义则需要去掉html等后缀。 再下一步则是最关键的https设置了! 备份源站一般博客应该没有,直接忽略,勾选启用SSL加速,开启https: 接下来的回源方式就和前文提到的80和443的选择异曲同工了,还是一样的道理,如果源站有强制https,那么就必须选择HTTPS协议回源才行! 强制https访问,这是腾讯云CDN都没有的功能,云端提供了!本来我还更高兴的!结果发现这个强制https跳转居然是返回302状态,感觉不是很符合百度推荐的301永久跳转,我个人最后是在源站设置了301跳转。 SSL证书这一项就是选择我们前面新建的那个SSL证书了,无需赘述。 再往后,基本就不用多说了,自己折腾吧! 二、经验分享 国内免费CDN一般都限制在每月50GB流量,一般博客是够用了。但是发展到一定阶段,50G流量肯定是不够的,比如张戈博客一个月至少上100G的CDN流量,几十块的预算还是要的。 那有没有办法节省一点呢? 这里分享的方法,只适合有多个CDN服务的朋友。比如,张戈博客同时在用腾讯云CDN和云端CDN,我将电信线路解析到了腾讯云CDN,而将默认线路给了云端CDN。 因为腾讯云CDN目前我还有个100G的流量包,先用完再说。 简单来说,就是使用线路分摊的办法来解决这50G不够用的尴尬。当然,如果你只是看到了这篇文章介绍的云端CDN,那就只能等以后慢慢发掘了。。。 三、问题汇总 博客开启https这段时间,着实遇到不少问题,所以下面简单分享一些经验技巧。 ①、支持https的视频 我博客之前是有一些在线MV的,开启https之后全部都废了,原因大家也都清楚,https里面的http资源会被浏览器拦截,所以必须要使用https的视频地址才行! 本来我也就懒得维护那些在线MV了,不过偶然在腾讯内部博客平台看到有人问到了腾讯视频是否支持https,正好有相关产品经理回答了这个问题,也给出了解决方法。 很简单,先找到腾讯视频的ID: 然后使用如下地址即可实现https访问视频了: https://v.qq.com/iframe/player.html?vid=f0019nr9cdd ②、百度提交https 百度在提倡https之后,站长平台已经支持提交https站点了! 进入百度站长平台,然后删除之前的域名,再添加该域名的https站点即可: Ps:不过坑的是,站长平台貌似对https支持不太友好,改成 https之后各种数据都停滞不动了。。 ③、微信公众号 微信公众号暂时不支持https,而源站又全站强制开启了https,所以导致公众号也无法提供自动回复功能了!解决办法也很简单: 方法 I:新增一个域名,使用http即可,root路径和主域名一致即可; 方法II:针对POST方法,取消强制https规则即可 Nginx可以这样配置: 将之前强制https跳转规则改成如下即可: ④、CDN公共库 支持https的CDN都有免费额度限制,所以能托管到第三方的尽量托管,能省则省。 比如,我博客用的是1.8.2版本的JQery,以下则是我搜集的一些支持https的JQ公共库地址: 新浪云:https://lib.sinaapp.com/js/jquery/1.8.2/jquery.min.js  (速度不错,博客在用) 百度扒来的:https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/js/lib/jquery-1.10.2_d88366fd.js 貌似是ASP官方的:https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.2.min.js JQ官方的:https://code.jquery.com/jquery-1.8.2.min.js 下面的同样支持https,非常不错: Bootstrap官方CDN公共库:http://www.bootcdn.cn/ 又拍云CDN公共库:http://jscdn.upai.com/ ⑤、http被缓存 这个问题是我在用腾讯CDN的时候出现的,原因是因为腾讯云CDN不支持设置强制https跳转,而且还会缓存http站点,导致访问博客http地址也不会遵循源站的强制https跳转了! 要彻底解决这个问题只能等更新CDN机制了。当然, 如果设置CDN不缓存应该也是可以的。 我们暂时可以利用JS来解决这个问题,将如下js代码加入到header即可: 好了,以上就是本文分享的所有内容,希望对各位有所帮助!
阅读全文
网站建设

借助腾讯云CDN开启全站https及问题解决分享

“眼尖”的朋友,已经看到张戈博客已全面启用 https 了,当然这几天站点502也是常用的事情。不过到我写这篇文章为止,应该算是安定了下来。 自从百度推荐全站 https 以来,一直就想让博客跟上这个节奏。可惜,国内所有的免费CDN都不支持https。所以要开启https势必要暴露网站真实ip,按照现在张戈博客被攻击的节奏,估计一暴露就没有了安生的日子! 偶尔的心血来潮,百度了一把支持https的CDN,打开了腾讯云的一个Q&A: 1.3CDN支持https吗? https目前处在邀请测试阶段,暂时还不提供申请,还请谅解。我们正在完善此特性,一旦产品成熟,我们会第一时间公布,敬请期待。 呵呵,邀请测试是么?既然是自家的产品,那还是毛遂自荐吧! 于是找到了公司腾讯云的产品经理,说了我这个想法,于是有幸就用上了国内这个为数不多的特权。 虽然,走的是后门,但是测试责任还是得尽好才是,因此也和产品经理没少交流。博客全面https化也遇到了非常多的问题,下面就让我来细细道来。 一、http回源 腾讯云CDN默认是http回源,这样就有一个问题:因为我们要全站https,不想有http, 那么势必需要将http的请求301到https上。这时腾讯云通过http过来请求源站,那么请求到的就是301了!这也是前些天张戈博客时不时来一个502的原因了。大部分请求对301的支持不是很完善。。。 刚开始还无法自行设置回源模式,还好我用上不久,就发布了新版本,支持回源选择。妥妥的选择了https回源。然后静态文件我没有做强制https,因此静态文件我选择http回源,略微优化一下负载。 二、微信公众号 如上设置之后,又发现了一个新问题,微信粉丝跟我反馈,公众号不能自动回复了! 检查了下,原来是因为公众号只支持http模式的token请求,因此微信公众号的http请求得到的也是301结果,导致自动回复失败! 看来全部跳到https也是行不通的。测试了半天,最后用如下nginx规则搞定: 另外值得说明的是,如果开启了强制https的站点被其他域名反向代理(比如张戈博客用到的res.zgboke.com),那么proxy_pass 也需要指向https才行: 比如:proxy_pass https://zhang.ge; 否则反向代理可能会502!和之前腾讯云不支持https回源选择一样的结果。 三、http被缓存 虽然CDN对301的缓存支持不好,但是不代表不能缓存301!因此,腾讯云CDN偶尔会缓存网站的http结果,导致强制跳转https失效!结果就是访问http页面也不会自动跳转了。 而现在腾讯云还不支持在节点直接设置强制https跳转,实在没办法,在网页的header里面加入如下js代码搞定这个问题: 三、各种跳转 https之后,发现以前的文章外链自动跳转出问题了,把文章中的内链也当成了外链!而且评论中我自己的链接也变成了跳转。 看了下,原来是之前的函数并没有兼容https,于是改了下,搞定。 四、外部资源 众所周知,要全站https,那么所有页面都不能存在非https资源,否则浏览器就会拦截这些内容,并显示惊叹号! 于是大把的问题迎面而来: ①、百度分享不支持https 这个问题最终我用最苦逼的方法解决了,那就是将百度分享代码中的js,已经js会请求到的其他js/css资源全部都下载到本地(具体会请求到哪些资源,我都是在浏览器开发者模式中获取的),并修改其中的链接指向到本地,搞定了百度分享的大部分功能。 比如,分享到QQ空间、微博,分享到微信显示二维码都搞定了,唯独那个“更多”选择恕我无能为力: 最后,我将修改好的文件上传到支持https的七牛CDN,所以有需要的人可以将百度的分享链接修改如下,即可使用: 说白了,就是将之前的百度分享代码中的js修改为七牛镜像js地址即可: https://dn-iyz-file.qbox.me/static/api/js/share.js 如此解决之后,浏览器https就是绿色了,不会有黄色的惊叹号! Ps:最近,我在瞎逛时,在一个博客那看到了一个更完善的利用七牛解决百度分享不支持https的办法,推荐大家使用:传送门 (本文已更新为代码,更完善) ②、新浪微博关注按钮 好吧,这个问题我暂时没时间处理,直接屏蔽了这个功能,估计参考上面的方法可以解决。 五、整理总结 全站https已有3天,总体还是不错的!不过,腾讯云CDN的https功能目前还在邀请测试阶段,所以想尝鲜的小伙伴就只能耐心等待正式公测了。相信这个国内唯一支持https的CDN会大受欢迎的! 不知不觉已经写了这么长了!暂时就整理这么多,后续有新的问题再更新到这篇文章当中,敬请期待!
阅读全文
网站建设

太狗血了!分享一下张戈博客百度收录排名异常的检查记录

关注张戈博客以及喜欢转载张戈博客原创博文的朋友,应该都发现张戈博客现在的百度收录异常惨淡!而且,我还叮嘱哪些喜欢转载我博客博文的朋友,不要转载半个月内发布的文章,因为我以为几个月来百度不收录、排名下降严重的是因为我先后更换主题-->换用360网站卫士-->文章被人快速转载所致。 我发现最蛋疼、最诡异的是,我发布的文章几个月都没被收录!!!然后我也默默的在心里把度娘骂了几个月,尼玛就算被人采集、被人第一时间转载也不至于不收录啊? 可实际有图为证: 基本从5月份开始,发布的文章就不再收录,索引从4800掉到现在1000左右! 期间,我各种怀疑,是不是robots设置有误?是不是外链go跳转对搜索引擎封闭等措施带来惩罚? 直到。。。直到我今天心血来潮,想试下百度的API搜索接口,提供sitemap数据才发现抓取失败。 其实,在之前我就发现所有和sitemap数据提交有关的功能都提示抓取失败!但是尼玛,在百度抓取诊断检测相同的链接又是成功的!! 我以为是百度站长工具出现了暂时性的问题,还反馈过:   直到今天,我还又反馈了一把: 反馈完之后,我反复去看了下这个抓取失败结果: 结果发现都是连接超时错误,DNS解析是没问题的,确实是真实IP,看来不是使用CDN的问题:   继续看了几遍之后,我偶然点开了抓取异常这个工具,一看吓一跳,每天的连接超时居然将近一半! 突然灵光一闪,连接超时,好熟悉的字眼,不是40X,也不是50X。。。没错,就是防火墙拦截! 赶紧登陆阿里云ECS看了下iptables: 看到了有2个网段被禁用,先尝试解封,然后回到百度更新了下sitemap试了下,居然成功了?! 我次奥!真是这个网段被禁封造成的!成功后,我特意再次更新sitemap。并看了下nginx日志,发现还真是220.181.108这个IP段的IP,尼玛,巧就巧在百度抓取诊断工具不在这个网段,可以正常抓取,迷惑了我几个月!!! 事后,我努力的回忆了一把当时为什么禁用了这2个网段。。。 记得,当时是Begin交流群里有个人采集我的整个博客。我当时用了各种办法禁止他采集内容中的盗图,最终他用了搜狗的图片接口来采集我博客的图片。我就不好怎么禁止了,因为搜索引擎来的IP,CDN是自动回源的! 于是,我图省事直接把搜狗的图片接口IP的整个网段都给禁封了!尼玛,当时也没想过百度和搜狗的蜘蛛节点可能在同一个机房了??另外恶狠狠的诅咒下,采集个人博客者木有小JJ!! 几个月的时间,对SEO带了非常严重的影响!要不是运气好,突然想到了这么一桩,这博客的百度SEO就基本废了! 废了也没什么,关键不明不白,谁也不爽吧!此次解除禁封之后,相信不出一个月,应该就会有效果了,至少最新发布的文章是会被收录的,不看别的,就见证下本文一个星期会不会被收录吧!不过之前未收录却被转载走的文章算是废了,发出去虽然推送到了百度,但是百度却没抓取到内容,被人转了之后估计被识别成首次发布的原创了吧! 好了,本文算是一个吐槽贴,也是给一些网站降权、收录异常的朋友一个参考,某些时候,收录异常、网站被K站不一定是你SEO方面的问题,一定记得看看是不是服务器把蜘蛛挡在门外了哟! 后续跟进篇 2015-11-02:再去百度站长平台查看抓取异常和抓取时间,可以发现已复到正常水平:
阅读全文
网站建设

百度站长平台推出链接提交自动推送JS代码

张戈博客之前分享过百度的各种链接提交推送的代码或插件,有原创代码,也有改良插件: WordPress发布文章主动推送到百度,加快收录保护原创 WordPress百度链接主动提交插件:Baidu-links-submit优化版 BaiduSubmit:百度WordPress结构化数据插件(改进版) 不过都是基于 WordPress 建站程序的,其他建站程序不免只能捶胸顿足无奈乎... 不过,前几天偶然在百度执行site命令时,发现百度又推出了新鲜玩意,点开一看发现不错,公告内容如下: 亲爱的网站管理员: 为了更快速的发现站点每天产生的最新内容,百度站长平台推出了技术门槛更低的JS自动推送工具。站长只需一步安装便可实现页面自动推送,成本低、收益高,弥补了部分站长反馈的使用主动推送方式提交时技术门槛较高的问题。 自动推送JS代码是百度站长平台最新推出的轻量级链接提交组件,站长只需将自动推送的JS代码放置在站点每一个页面源代码中,当页面被访问时,页面链接会自动推送给百度,有利于新页面更快被百度发现。 按照经验,打开百度站长平台,点击【链接提交】栏目,果然发现多了一个自动提交选项: 简单看了下,发现部署非常简单,只要将如下js代码添加到网站的每一个前台页面即可,最值得称赞的是支持所有html页面,而不再受限于建站程序! 如果你不知道放到哪,那么最简单的方法就是将上述代码放到你平常用于站点访问统计的代码旁边,比如CNZZ的站点统计。当然,其实就是将代码放置到建站程序的公用部分即可,比如header或footer等公共模块。 从页面加载优化来说,则建议放置到footer模块内,让其后置加载请求。 百度也终于开窍了一次,php也好,asp也好,都受限于开发语言,总是无法一劳永逸。这次推出这个js推送方案就真正实现了全面兼容了。 这段代码的工作原理也非常简单:基于自动推送的实现原理问题,安装代码的页面在任意平台(浏览器、微信、微博)被加载时,页面链接会被第一时间推送给百度,从而提高站点新内容的发现速度。无需站长汇总URL再进行主动推送操作。借助用户的浏览行为来触发推送动作,省去了站长人工操作的时间。 那么,当你部署此代码后,每次发布文章后,只要第一时间访问一下文章页面,即可在前台触发推送机制,将最新文章推送给百度。 按照百度的说法: 自动推送和链接提交有什么区别? 已经在使用链接提交的网站还需要再部署自动推送代码吗? 二者之间互不冲突,互为补充。已经使用主动推送的站点,依然可以部署自动推送的JS代码,二者一起使用。 什么样的网站更适合使用自动推送? 自动推送由于实现便捷和后续维护成本低的特点,适合技术能力相对薄弱,无能力支持全天候实时主动推送程序的站长。 站长仅需一次部署自动推送JS代码的操作,就可以实现新页面被浏览即推送的效果,低成本实现链接自动提交。 同时,我们也支持主动推送和自动推送代码配合使用,二者互不影响。 貌似张戈博客经常提到的“重复推送数据到百度,会导致文章进入收录沙盒”的说法又不那么坚定了。从上面的FAQ来看,百度倒是提倡多种链接推送同时使用,互为补充。 但是,按照经验来看,感觉不那么靠谱,个中曲直就自己把握了,我觉得二者选其一即可。 问题补充: 顺便看了下百度这段js的代码: 发现是利用 referrer 来获取页面地址的。然后,在network中看了下请求地址是如下形式: http://api.share.baidu.com/v.gif?l=http%3A%2F%2Fzhang.ge%2F5069.html 给一个图片传参?好吧,表示没看懂工作原理。但是,我突然醒悟了一件事情,通过JS获取页面地址其实也挺坑的,比如某篇文章是: https://zhang.ge/5066.html 那么该文章的分页就是: https://zhang.ge/5066.html/comment-page-2/#comments 如果用 js 来推送,势必后面的页面也有可能被推送。也就是说,js推送的方式很可能就会推送一些我们不想被收录的页面,并没有php代码那么精准! 当然,如果你的网站任何页面都想被收录,那么也就无所谓了。
阅读全文
网站建设

如何正确配置CDN高速缓存,避免越用越慢的尴尬

越来越多的博客网站开始用到了国内的免费CDN了,比如百度云加速、360网站卫士、加速乐及云盾等等。之前我也写文章分享过国内低配置VPS的优化方案,其中提到了很多站长开启CDN加速后反而更慢的问题。 文章是这样描述的: 动态网页会越用越慢 很纳闷吧?但事实的确是这样!我们先要弄清楚这些CDN加速的原理:当用户请求我们网页时,请求会发到CDN节点上,如果是动态数据,那么CDN节点将回源站拉数据,返回给用户!也就是说数据是经过了多次转发,加上CDN节点和源站的延迟,肯定是效果不明显,而且更慢! 这就不难解释,总是有人抱怨百度云加速越用越慢,而有人却说很快了。区别就是,快的人开启了云加速的整站缓存,而慢的人只是弄了一个CDN代理转发而已。 没错,如果只是开启CDN,而不合理的设置缓存,就会越用越慢。 下面我就分享2种CDN下的配置方案。 一、动静均缓存 这也是张戈博客之前用到的方案,网站前台不管是静态还是动态,我统统缓存到CDN。那速度绝对可以飞起来。 老版百度云加速以及360网站卫士等,都可以非常简单的搞定这个事情,因为只需要直接勾上需要缓存的类型,比如一般都是让你勾选【html】 、【目录】、【首页】这3种类型,全部选上就可以了。 这里插播2条实用技巧: ①、缓存黑名单 全部选上后,整个网站不管前后台都会缓存,连后台都缓存了,那还怎么玩?所以,这些CDN肯定还会支持缓存黑名单,大部分是路径匹配的,比如360网站卫士就可以如下设置不缓存后台: 一般都是支持通配的,如果连通配都不支持,那也没必要使用了。 ②、目录不缓存? 不知道有没有朋友遇到勾选了目录缓存之后,你的Wordpress网站的分类和单页面依然不会缓存,这是为什么? 其实问题在于WordPress的目录和单页面地址默认是不以斜杠/结尾的,不是一个标准的目录形式。而绝大部分CDN定义的目录是以斜杠结尾的! 有2个方法来解决这个问题: 如果CDN存在缓存白名单,那么可以设置强制缓存(略麻烦) 让WordPress的分类目录和单页面以斜杠结尾即可==>详细教程 那么,问题来了。新版百度云加速已经取消了这种简单的勾选配置!很多朋友解析到云加速后就放一边了,结果速度依然蜗牛,没有感受到飞的快感。 其实,新版百度云加速需要自己自定义规则来开启缓存!下面简单分享下WordPress在百度云加速下开启高速缓存的自定义规则,如图点击可进入设置: 同样的,根据前面的黑白名单规则,我们先定个调,一般网站应该是这样的情况:前台都缓存、后台不缓存、个别页面要缓存或不缓存。 先看下百度云加速自定义规则的说明: 提示说明: 规则自定义指对“指定URL”进行页面级规则定制(支持通配符*)。可对任意子域名、目录、甚至单个URL进行针对性的加速缓存、安全防护等配置。列表中上下关系决定优先级,靠上规则优先级高。站长可以通过点击“↑”调整优先级。新增规则优先级最低,将于30s内生效。 URL指定支持通配符*,例如 1) 对img.yoursite.com进行特定设置,需增加URL: img.yoursite.com/* 2) 对www.yoursite.com/news/ 进行特定设置,需增加URL: www.yoursite.com/news/* 3) 对www.yoursite.com所有html页面进行特定设置,需增加URL: www.yoursite.com/*.html 支持通配,这就简单了!不过免费版只支持3条规则,这个就需要我们合理斟酌一下了。 优先级从上往下依次降低,所以我们要保证不缓存的规则写到最上面,才能不会缓存规则覆盖。 根据我个人经验,一般WordPress网站设置如下3条规则即可: ①、网站后台:zhang.ge/wp-admin/*   设置为不缓存或细致缓存 ②、评论分页:zhang.ge/*/comment-page-*    设置为不缓存或细致缓存 ③、网站前台:*zhang.ge*    设置为前后通配都缓存 Ps:细致缓存其实就是只缓存静态文件,其中缓存时间或有效期请自行设定即可,无需按图照办。另外由于新版百度云加速现在不能对单个域名设置了,所以最后的缓存规则是前后通配,保证某些网站的二级静态域名也缓存到位。另外,这只是我个人经验推荐的配置,比如评论分页就可以根据自己的需要设置为其他页面,此处分享仅供参考! 这样设置好了之后,网站前台刷几下就可以看到效果了,当然还可以F12到network里面去看header的缓存命中情况,这就不赘述了。 二、只缓存静态 动静都缓存可以解决国内低配VPS的2个尴尬:带宽和负载。带宽问题,国内普遍小水管就不用我多说了吧。负载问题则是WordPress一直以来的诟病,刷新快一点,CPU就满了。 但是,有一些网站,本地已有缓存或者访问流量并不高,他们不想开启全静态缓存,因为会带来的各种数据不刷新问题。因此,我们如何既解决速度问题,又兼顾实时数据呢? 当然,开启CDN不进行整站缓存设置的话,大部分CDN会默认缓存静态文件,基本满足以上需求。但是某些CDN有个坑爹的规则:他会和谐某些关键词,访问有这些关键词的页面就提示违规并不显示。 如何解决这个问题?很简单,通过域名做动静分离即可。 将静态链接替换为二级域名,并开启CDN缓存。主域名则不走CDN或走CDN但不开启缓存。 将静态链接替换为二级域名应该不用我多说了吧?不会的看一下张戈博客之前分享的七牛CDN代码版即可==>传送门 主域名不走CDN也很简单,直接在解析时不开启缓存即可,也就是直接回源: 如果担心暴露IP,如果是阿里云ECS,你还可以CNAME到阿里云的WAF上(这也是张戈博客目前的做法): 走CDN开启缓存和走CDN禁止缓存应该也不用我多说了,上文都有分享规则。 如上设置后,你的网站的速度也会很快,当然前提是你的动态部分不卡才行。如果网站还是比较卡,但是你有不想开启纯静态导致数据不刷新,那么 ①、如果是独立主机,可以考虑开启redis或opcache等php动态缓存 ②、如果是虚拟主机,可以安装 DB Cache Reloaded Fix这类数据缓存插件 当然,如果你觉得还是不够快,那么推荐和张戈博客一样,开启Nginx的fastcgi缓存! 三、总结下区别 方案一 和 方案二 到底有什么区别呢? 方案一 是将动态和静态都强制缓存到CDN,这样就算本地不开启任何缓存,用户的访问速度也是杠杠的。如果想要给搜索引擎蜘蛛一样的速度,那么本地最好也开启一下静态缓存。 方案二 则是只缓存静态数据,动态数据依然请求到源服务器。这样做的好处是既解决了带宽尴尬,又解决了前台数据不能实时刷新的问题。因为,占带宽的主要是静态文件,而非html代码。我们将大体积的静态文件托管到CDN加速,源服务器就只要负担体积很小的html代码流量了,速度自然就快了! 当然,这样做很容易就出现了前文提到的开启CDN反问变慢的尴尬。。。解决办法也很简单,本地开启一下动态缓存即可。 张戈在帮不少站长做网站优化时,设置过百度云加速,发现大部分站长都不会设置,然后还对我说为啥你弄过之后就飞起来了,我当初使用云加速就卡出翔?其实就是不会设置而已!所以,今天我分享出来,弱弱的为CDN正名,那些用过之后骂CDN垃圾越用越慢的人,先自己好好反省一下吧! 好了,本文罗里吧嗦说了一大堆,有需求的自然会豁然开朗,没需求的就会如同嚼蜡了。我敢说,如果你看懂了这些设置技巧,那么使用任何CDN都会信手拈来,轻松应付! 总之一句话,张戈写文章的期望不高,希望对有需求的人有所帮助就好。
阅读全文