网站建设

分享张戈博客的WordPress优化方案,缓解国内云服务器配置低下的问题

有很多朋友留言问张戈博客的服务器配置如何,为什么能这么快?当知道张戈博客用的是阿里云最低档的ECS的时候,都觉得不可思议,因为他们用的更好的配置却没有达到张戈博客一半的速度。所以,我觉得自己有必要分享一些低配服务器下的WordPress优化方案,让更多人少花冤枉钱。 一、先晒配置 分享之前先贴一下张戈博客和中国博客联盟2个网站共用的服务器的配置以及负载情况。 ①、基本配置 从下图可以看出,张戈所用ECS是阿里云最低的档次,而且是最便宜的青岛区域,多加了一块云磁盘用于数据容灾,整体资费为52¥/月: ②、负载情况 很多朋友抱怨WordPress非常耗配置,经常CPU飚的很高!不得不承认,不做任何缓存的情况下,WordPress 多并发几个请求,负载就上去了!下面是张戈博客和中国博客联盟一天的CPU和网络负载: 很明显,不管是CPU还是网络负载,都非常低!我想说,这种情况下我在跑几个网站也没有什么问题。 二、优化方案 ①、有无必要 上文也提到了,再不开缓存的情况下,WordPress多并发几个请求就要卡出翔,确实这玩意非常臃肿!当然,很多建站前辈都会温馨提示,访问量不大不建议开启缓存啥的,否则各种蛋疼问题。确实也是这样,如果你不清楚缓存原理,网站访问量也很低,那么确实不推荐。 但是,如果你了解并能够轻松驾驭所用缓存,那么推荐你把缓存用好,用到极致!不要去信什么访问量不高就不用开缓存的建议,良好的网页加载速度,也是带来流量的基本因素!至少,我在百度搜索教程,如果那个网页好几秒还没出现第一屏,我就回头点开其他搜索结果了! ②、缓存方案 说了那么多,那么我简单总结一下WordPress的缓存优化方案,目前主流方案,大致有如下2类: 数据缓存:只缓存一些动态查询,第二次查询将有几率命中缓存,无需再次计算; 静态缓存:将页面直接缓存,并保存为文件存放,第二次访问直接调用。 数据缓存:根据缓存程度,我个人理解为轻度缓存,适用于流量中低等的网站。主要是缓存php的动态查询,减少直接访问数据库和PHP实时计算的次数,从而加快页面数据的生成。 数据缓存方案,张戈接触并用过的大概有如下几个做法: 1). 安装插件:比如 DB Cache Reloaded、Hyper Cache、WP Super Cache等 2). 缓存组件:Redis、memcache、oqcache等 Ps:当然,Hyper cache 和 wp super cache 也可以实现静态缓存。 静态缓存:这种做法是直接生成静态文件,甚至直接通过WEB服务器调用,而不再通过PHP计算。这样页面就是真正的纯静态,加载速度不言而喻! 静态缓存方案,依然有多种方法实现: 1). 插件缓存:WP Super Cache、cos-html-cache、Hyper Cache等 2). 代码缓存:直接通过PHP代码,将数据流保存为html文件 3). WEB缓存:直接通过Nginx或Squid来缓存数据 插件缓存,就不多说了,圈子里用的最多的方案,推荐入门级玩家使用。当然,张戈博客也分享过不少相关文章,感兴趣的童鞋可以凑合看看: 实现WordPress提交评论的时删除该页面的WP-Super-Cache缓存的方法 WordPress结合阿里云OCS开启高速缓存,优化网站响应速度 百度蜘蛛狂暴了!nginx下wp super cache的mod_rewrite规则 php平滑重启nginx,彻底清除WordPress的静态缓存 WordPress评论ajax动态加载,解决静态缓存下评论不更新问题 代码缓存,这个方案张戈博客就分享过不少相关改进文章,这里就不赘述了: WP Super Cache静态缓存插件纯代码版(兼容多域名网站) 启用WP Super Cache纯代码版本之后的一些优化措施 WEB缓存,我主要接触过Nginx和Squid,目前在用的是Nginx缓存,效果非常不错!推荐有个人云主机的朋友使用: Nginx开启fastcgi_cache缓存加速,支持html伪静态页面 ③、带宽尴尬 众所周知,国内服务器和国外服务器有个很鲜明的区别:国内的服务器出口带宽都是小水管,而且升级还特贵,不像国外动不动就是G管!唉,升级带宽性价比低下,那么该如何解决? 比如,张戈博客所用服务器只有1M带宽,从外部全速下载服务器上的一个文件,速度峰值也就120kb/s左右(某博客写文章说1MB带宽服务器对外下载速度可以达到1M/s,我也是醉了)!而通过CNZZ不权威统计,张戈博客经常达到30人同时在线,如果不做优化,根本无法应付十多人同时访问! 该如何解决这个尴尬问题呢?张戈分享2个方案: 1). 动静分离、静态资源托管CDN 所谓动静分离的做法就是,将网站的静态资源,比如图片、JS、CSS等文件托管到CDN,采用二级域名或第三方域名的方式来加载。这样的好处就是,打开网页时,只有HTML代码是从我们服务器上下载的,而相比html体积更大的静态文件都是从CDN请求出去的,那么我们的服务器也就只要承受很小一部分带宽占用了。 目前国内免费的CDN主要有七牛云和又拍云,对于中低等流量的网站已基本够用。但是,对于每日流量过万,然后文章存在不少图片的网站来说,免费额度肯定不够用! 2). 使用国内免费的CDN缓存服务 目前国内用的比较多的是百度云加速、360网站卫士、加速乐和安全宝等。前2个我都用过,都很不错!使用此类CDN,要注意以下2个问题: 动态网页会越用越慢 很纳闷吧?但事实的确是这样!我们先要弄清楚这些CDN加速的原理:当用户请求我们网页时,请求会发到CDN节点上,如果是动态数据,那么CDN节点将回源站拉数据,返回给用户!也就是说数据是经过了多次转发,加上CDN节点和源站的延迟,肯定是效果不明显,而且更慢! 这就不难解释,总是有人抱怨百度云加速越用越慢,而有人却说很快了。区别就是,快的人开启了云加速的整站缓存,而慢的人只是弄了一个CDN代理转发而已。 所以,如果使用此类CDN加速,那么建议先开启网站静态化缓存,然后到CDN那开启缓存即可! CDN缓存有没有生效,可以查看如下报表: 很明显,大部分是加速请求,访问流量只有少部分到了源站,所以我1M带宽算是给自己和搜索引擎用了,绰绰有余。顺便贴一下百度云加速文章页面的缓存设置: 遗憾的是,百度云加速只能设置3条规则,自己参考设置吧。 额外解析搜索引擎线路 很多朋友质疑,用这些CDN会不会影响SEO?因为CDN节点IP经常变动!其实这个 问题很好解决,额外解析一条搜索引擎线路即可!完全没必要被这个问题所困扰。 张戈博客选择百度云加速的原因也就是这个,我主要在意百度的SEO,所以我用百度云加速,理由就是百度云加速有搜索引擎线路,而且是自家的产品,肯定是准确无误的。 ④、更多优化 都已经纯静态化了,其实能继续优化的项目已经少之又少了。但是作为强迫症,还是有下手的地方的,那我简单的分享几个吧! Cookies优化 这也是百度站长平台页面优化时提示的项目:cookie越小越好,而且对于静态文件需要避免设置cookie。很多人纳闷百度的这个提示是什么意思? 其实简单的理解就是:网页中的cookies也是一种数据,也需要和服务器建立通信,占用流量带宽,cookies虽然很小(几十字节到几KB),但是如果一个页面有很多cookies,总量就很可能达到几十k!一个页面才几十上百k数据,你cookies就有几十k,这是很恐怖的事情!极大的拖慢了整体加载速度! 而实际上,很多cookies是没必要的,尤其是网页中的静态文件!如果像张戈博客这样使用顶级域名,WordPress默认会给所有文件带上cookies,也就是将cookies写到了 .zhangge.net 这种通配域名上了,导致域名污染:当浏览器向服务器请求一个静态资源时,会先发送同域名下的 cookie,服务器对于这些 cookie 不会做任何处理。因此它们只是在毫无意义的消耗带宽。所以你应该确保对于静态内容的请求是无coockie的请求。 所以,对于静态资源,我们要用单独的域名,以减少无用请求,提高网页性能。下面说一下具体做法: 2016年12月11日更新:当网站首选域名是顶级域名的时候,主站的cookies将写到所有的二级域名。比如张戈博客这样不带www的域名,则需要使用其他域名托管静态文件,比如张戈博客现在使用的是 res.zgboke.com,否则同一个域名下的二级、多级域名都会带上主站的cookies,比如之前用的res.zhangge.net! 因此,需要分带www和不带www的2种情况。 ①、网站不带www的形式...
阅读全文
WEB应用

服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

我们都知道网络上的爬虫非常多,有对网站收录有益的,比如百度蜘蛛(Baiduspider),也有不但不遵守robots规则对服务器造成压力,还不能为网站带来流量的无用爬虫,比如宜搜蜘蛛(YisouSpider)(最新补充:宜搜蜘蛛已被UC神马搜索收购!所以本文已去掉宜搜蜘蛛的禁封!==>相关文章)。最近张戈发现nginx日志中出现了好多宜搜等垃圾的抓取记录,于是整理收集了网络上各种禁止垃圾蜘蛛爬站的方法,在给自己网做设置的同时,也给各位站长提供参考。 一、Apache ①、通过修改 .htaccess文件 修改网站目录下的.htaccess,添加如下代码即可(2种代码任选): 可用代码 (1):  可用代码 (2): ②、通过修改httpd.conf配置文件 找到如下类似位置,根据以下代码 新增 / 修改,然后重启Apache即可: 二、Nginx代码 进入到nginx安装目录下的conf目录,将如下代码保存为 agent_deny.conf cd /usr/local/nginx/conf vim agent_deny.conf 然后,在网站相关配置中的  location / {  之后插入如下代码: 如张戈博客的配置: 保存后,执行如下命令,平滑重启nginx即可:  三、PHP代码 将如下方法放到贴到网站入口文件index.php中的第一个 <?php 之后即可: 四、测试效果 如果是vps,那非常简单,使用curl -A 模拟抓取即可,比如: 模拟宜搜蜘蛛抓取: 模拟UA为空的抓取: 模拟百度蜘蛛的抓取: 三次抓取结果截图如下: 可以看出,宜搜蜘蛛和UA为空的返回是403禁止访问标识,而百度蜘蛛则成功返回200,说明生效! 补充:第二天,查看nginx日志的效果截图: ①、UA信息为空的垃圾采集被拦截:   ②、被禁止的UA被拦截: 因此,对于垃圾蜘蛛的收集,我们可以通过分析网站的访问日志,找出一些没见过的的蜘蛛(spider)名称,经过查询无误之后,可以将其加入到前文代码的禁止列表当中,起到禁止抓取的作用。 五、附录:UA收集 下面是网络上常见的垃圾UA列表,仅供参考,同时也欢迎你来补充。 六、参考资料 问说:http://www.uedsc.com/acquisition.html 浩海:http://www.it300.com/article-15358.html 夜空:http://blog.slogra.com/post-135.html
阅读全文