WEB应用

小网站最简单实用的动静分离优化方案

很久没写文章了,博客已经长草了,今天挤点时间分享一些小干货,也是回应一下不少站长朋友的留言问题。 有不少站长朋友问张戈博客的静态文件为啥是另外一个域名?有啥好处?如何实现? 其实这算是一种动静分离的做法,不过我这里用了偷懒的办法实现,而非彻底的动静分离,不过最终效果的区别并不大。 先啰嗦一下动静分离的概念和好处。 一、动静分离 我们的网站简单来说分为2种数据资源,一种是动态的数据,即PHP等程序语言实时吐出来的数据,在网页内容上主要是HTML代码,另一种则是静态资源,比如图片、css、js、视频等(当然,图片等资源也可能是实时动态生成的,比如PHP缩略图,这里就不展开讨论了)。 一般网站初建,因为流量小、业务简单等原因,都默认将两种数据放到一台服务器上提供服务。访问量大到一定程度之后,就可能出现带宽不足、甚至磁盘高IO等问题。这时,作为运维工程师或者架构师就会给出动静分离优化的建议了。做法并不复杂,运维工程师会将图片等静态资源同步到另一台WEB服务器,然后新增绑定一个二级域名,比如static.domain.com,最后让开发将网页代码中的静态资源替换成这个二级域名即可。 这样一来,图片等静态资源的访问就落到了新增的服务器上,从而分担了大部分访问数据流量和IO负载,我们还可以针对性的给静态资源WEB做一些优化,比如JS/CSS/图片压缩、内存缓存、浏览器缓存等等。进一步,我们还可以将静态资源接入CDN,实现资源就近访问。 可以用一张图来表示: 二、好处分析 1、常规做法的好处 从上文的通俗解释来看,很明显的一个好处就是解决带宽问题,像博客圈子里的服务器,绝大部分主机都是国内的小管道云服务器(带宽小于2M),并发访问量上来之后,就能很明显的感觉到带宽成为了瓶颈。 不过,博客圈大部分都是“一穷二白”,一般都不愿意再买一台服务器来专门承载静态资源,而且多台服务器之间的数据同步等日常维护问题也变相提高了折腾门槛。因此,国内大部分小博客都热衷于套一层CDN来解决带宽问题,确实是一个很好的解决方案。在《分享张戈博客的WordPress优化方案,缓解国内云服务器配置低下的问题》一文中,也是特别提到了这一茬。 2、本文分享方案的好处 上文说张戈博客使用了一种偷懒的方案,做法很简单:网站只用一台服务器,但是会新增绑定一个和主站完全不一样的二级域名,比如张戈博客主站是zhang.ge,而二级域名用的是 res.zgboke.com,并且给这个二级域名套了一层CDN。 这样做又有什么好处?和直接套一层CDN(比如云加速)有什么不同? 第1个好处:显而易见比常规动静分离成本更低,分离前后服务器数量不变; 第2个好处:解决主站直接使用一级域名带来的cookies“污染”,即静态资源不会再带上主站的cookies数据,减小了体积。这个在上文提到的优化方案一文中也着重提到,详细就不再赘述; 第3个好处:这个方案对于网站内容没法备案又想体验国内CDN加速快感的网站绝对是福音!很多网站因为内容特殊(邪恶脸)没法完成备案,所以无法使用国内的CDN,那么就可以用本文分享的方法,直接花钱买一个备过案的垃圾域名,做好动静分离,然后将这个二级域名接入国内的CDN,网站速度绝对可以得到质的飞跃,是不是爽歪歪? 第4个好处:这个和第二个比较类似,主要针对在百度云加速购买了付费套餐的朋友。因为,对于一般流量的网站,你只需要在百度云加速给一个域名购买一个专业版,那么就可以分离多个二级域名给N个网站使用,那么多个人合买一个专业版完全不成问题吧?当然,现在百度云加速也学聪明了,现在流量限制50G/天(我开始用这个方案的时候无此限制),但是对于普通网站已经很够用了!!! 第5个好处:CDN配置更加比较简单,因为这种静态二级域名,接入CDN之后,完全不用考虑缓存规则的问题,因为直接设置成全部缓存就好了!简单粗暴。 三、部署教程 啰嗦了好长篇幅,下面给出具体做法! 原理贼简单,就是在服务器上利用反向代理新增了一个新网站,内容则是反向代理了我们的主站,从而实现了2个域名共享相同的网站数据。 Vhost示范规则如下: 这样就在本地新增了和主站共用一份数据的二级域名,只提供静态资源访问,其他访问都跳到主站对应页面。 完成新增后,只需要使用以前分享的七牛CDN代码或者CDN插件,将网站的静态资源替换为这个新二级域名,比如以前分享的纯代码版,加到functions.php即可完成替换: 完成部署后,我们网站的前台页面中的图片、js等静态资源链接就全部换成了新的二级域名了。 Tips:其他部署方法 如果网站未启用https,完全可以更简单,只需要在我们的主站vhost配置的server_name参数中新增一个域名即可,比如: server_name zhang.ge res.zgboke.com; 当然,强迫症患儿们,还可以根据域名判断,来进行上述Vhost类似跳转,此处就不展开了。 同样的,对于虚拟主机来说,只需要在虚拟主机控制面板中新增一个二级域名绑定即可。但是这个方法不适用于https站点,因为一般的https证书并不能用于2个完全不一样域名。 最后,我们将这个二级域名接入CDN即可,接入方法就不啰嗦了,自己折腾吧!
阅读全文
网站建设

WordPress发布/更新文章、提交/审核评论自动清理阿里云CDN缓存

使用过CDN的朋友多少都有过文章更新无法自动删除CDN缓存的困惑,针对这个痛点,张戈博客也是多次发布相关教程,为广大草根站长朋友们解惑,比如: WordPress发布/更新文章、提交/审核评论自动清理腾讯云CDN缓存 WordPress发布/更新文章、提交/审核评论自动清理VeryCloud缓存 Nginx-helper纯代码版,文章评论发布自动清理Fastcgi缓存 但是,仍然不能满足博友们的诉求,于是很多朋友留言、邮件给我,要我帮忙写一个XX云CDN的自动清理功能之类的请求,我一般都是给出了敬请期待之类答复。 由于本人日常工作非常繁忙,所以只能一再跳票,今天难得得空,正好研究下阿里云CDN的缓存清理。 实际上,这些XX云CDN基本都有一些SDK接口文档,有点基础的朋友多花点时间撸一撸都能自己写出来,再说张戈博客之前还分享了好几篇类似教程,依葫芦画瓢总会吧?总不能因为有个XX云就要写一个XX云CDN清理教程吧?写完了XX云可能很快又会有一个OO云了。。。所以,掌握套路才是解决问题的关键! 好了,废话不多说,直接上教程。 一、准备工作 ①、开启CDN缓存 这里应该无需多言,如果存在CDN缓存不刷新困惑,肯定已经在CDN配置了文章、首页或目录缓存机制,否则也就不需要清理页面缓存了。 ②、申请认证密钥 阿里云密钥管理地址:https://ak-console.aliyun.com/#/accesskey 申请成功后,得到如图的AccessKey和AccessSecret,保存备用。 二、使用方法 ①、下载代码 为方便维护,代码已提交到github,请前往github下载或使用git clone命令克隆服务器本地: 然后,将refresh-aliyun-cdn-for-wordpress文件夹,上传到WordPress主题目录: ②、部署代码 编辑refresh-aliyun-cdn-for-wordpress文件夹下的api.php文件,按照实际情况修改如下代码:   保存后,修改WordPress主题函数模板文件functions.php,在<?php 之后加入如下代码并保存: 最后,如果PHP开启了opcache功能,还需要重启下php确保代码正常生效。 Ps:本文代码基于阿里云官方PHP-SDK代码修改,官方SDK包含了阿里云所有接口功能代码,单由于我们只用到CDN清理功能,所以其他功能代码已被我精简删除。 三、验证效果 完成上述部署操作后,我们可以进行效果验证了。验证方法很直观,我们先确保api.php文件中已将日志打开: 然后,我们在服务器上使用tail -f查看日志: 最后,我们试着更新文章、发表评论或审核评论,就会看到如下效果了: 当然这只是日志,你还可以实际修改下文章内容,然后在浏览器对比下修改前后的内容是否发生改变。 好了,关于阿里云CDN缓存的刷新就介绍这么多,后面有空再补充下百度云CDN的刷新教程,敬请期待!
阅读全文
WEB应用

Nginx网站使用CDN之后禁止用户真实IP访问的方法

做过面向公网WEB运维的苦逼们肯定见识过各种恶意扫描、拉取、注入等图谋不轨行为吧?对于直接对外的WEB服务器,我们可以直接通过 iptables 、 Nginx 的deny指令或者是程序来ban掉这些恶意请求。 而对于套了一层 CDN 或代理的网站,这些方法可能就失效了。尤其是个人网站,可能就一台VPS,然后套一个免费的CDN就行走在互联网了。并不是每个CDN都能精准的拦截各种恶意请求的,更闹心的是很多CDN还不支持用户在CDN上添加BAN规则,比如腾讯云CDN。。。 因此,就有了本文的折腾分享。 一、真假难辨 如何禁止访问,我们先了解下常见的3种网站访问模式: ①、用户直接访问对外服务的普通网站 浏览器 --> DNS解析 --> WEB数据处理 --> 数据吐到浏览器渲染展示   ②、用户访问使用了CDN的网站 浏览器 --> DNS解析 --> CDN节点 --> WEB数据处理 --> 数据吐到浏览器渲染展示   ③、用户通过代理上网访问了我们的网站 浏览器 --> 代理上网 --> DNS解析 --> 上述2种模式均可能 对于第一种模式,我要禁止这个用户的访问很简单,可以直接通过 iptables 或者 Nginx的deny指令来禁止均可: iptabels: iptables -I INPUT -s 用户ip -j DROP   Nginx的deny指令: 语    法:     deny address | CIDR | unix: | all; 默认值:     — 配置段:     http, server, location, limit_except 顺   序:从上往下 Demo: location / { deny 用户IP或IP段; } 但对于后面2种模式就无能为力了,因为iptables 和 deny 都只能针对直连IP,而后面2种模式中,WEB服务器直连IP是CDN节点或者代理服务器,此时使用 iptable 或 deny 就只能把 CDN节点 或代理IP给封了,可能误杀一大片正常用户了,而真正的罪魁祸首轻轻松松换一个代理IP又能继续请求了。 那该怎么办? 二、火眼金睛 如果长期关注张戈博客的朋友,应该还记得之前转载过一篇分享Nginx在CDN加速之后,获取用户真实IP做并发访问限制的方法。说明Nginx还是可以实实在在的拿到用户真实IP地址的,那么事情就好办了。 要拿到用户真实IP,只要在Nginx的http模块内加入如下配置: 那么,$clientRealIP 就是用户真实IP了,其实就是匹配了...
阅读全文
网站建设

WordPress发布/更新文章、提交/审核评论自动清理VeryCloud缓存

上一篇文章分享了WordPress发布文章评论自动刷新腾讯云CDN的教程,而博客现在还用到了VeryCloud的CDN,正好有朋友在文章后面留言说VC也有刷新缓存的API,于是就利用中午的时间折腾了下,成功搞定! 下面分享一下部署方法。 将以上代码粘贴到WordPress主题functions.php中,然后将 19,20行对应的中文改成VeryCloud的用户名和密码,保存即可。 Ps:貌似VC的缓存刷新API暂时还没完全公开,如果需要部署这个功能,需要联系客服,然后告知需要使用这个刷新CDN缓存的API,然后提供以下用户名给他就好了。而且代码中的lockstream的值可能需要VC客服提供,如果发现上述代码无法成功,请自行咨询VC客服。 部署好了之后,可以去更新文章或提交评论,然后登陆VeryCloud云分发后台,即可看到提交记录: 至此,说明你已部署成功。
阅读全文
网站建设

WordPress发布/更新文章、提交/审核评论自动清理腾讯云CDN缓存

目前张戈博客同时使用了腾讯云、VeryCloud以及七牛CDN,其中腾讯云负责电信线路流量,VeryCloud负责默认线路流量,而七牛主要是用于缩略图展示,你觉得这样做有什么好处? 一、兵分三路 本来博客自身就有PHP缩略图功能,不过腾讯云缓存后,这个带参数的缩略图经常出50x等问题,所以只好弃用。腾讯云负责电信线路的原因只有一个:其实没鸟用的安全认证(也就是QQ聊天的绿色钩钩),这里简单分享下吧: 不使用腾讯云的主机也能获得安全认证的方法: 很简单,使用腾讯云CDN即可,道理也挺简单,安全认证它检测的就是你的网站是否解析到了腾讯服务器,而且只检测电信线路!如果是腾讯的服务器,那么就可以通过安全认证申请,而且是不定期检查,如果发现解析到了别家的IP,呵呵,认证就取消了。 申请认证地址:http://console.qcloud.com/security 所以,为了这个没啥鸟用的认证,我还是将电信线路解析到了腾讯云CDN。当然,好处还是很明显的:3家CDN都有50G免费流量(其中七牛邀请朋友注册还送了40G),加起来就是150G流量,相信绝大部分博客是够用了吧? 好了,扯得有点远了,回归正题。 二、部署代码 同时使用3个CDN,其中VC和腾讯云的CDN主要是负责主站缓存,也就是html页面。相当于套了一次百度云加速一样。再设定下CDN缓存时间,比如1天,那么文章或评论有更新就得1天后才能刷新了。 偶然了下腾讯云CDN的WIKI,发现其实腾讯云提供了非常丰富的API接口,其中就包含了清理CDN缓存,感觉这个不错,于是就花时间折腾了下。 在腾讯云CDN开发大牛廖大师的指点下,成功搞定了WP发布文章或评论刷新腾讯云CDN缓存,下面开始分享。 完整的php代码如下: 先访问 https://console.qcloud.com/capi 创建或获取你在腾讯云的API密钥:然后正确替换上述代码中的8,9行的secretKey和secretId值,比如: 最后,将修改后的PHP代码添加到WordPress主题的 functions.php 函数模板文件当中即可! 三、其他啰嗦 部署后,博客发布或更新文章、评论的提交或审核都会调用API去清理CDN缓存,其中文章和评论的提交可能会比没有部署略微卡一点,评论的审核是异步提交,所以感知不到什么。 最终,我百度了一把php异步,将以上代码中的curl_init请求改造了伪异步,将时间缩短到1秒(因为CUROPT_TIMEOUT的值最小是1秒【相关文章】),所以挂上这个函数也就是略卡1秒而已,完全可以接受! 好了,本文分享到此告一段落,正在使用腾讯云CDN或打算做腾讯云安全认证将要使用腾讯云CDN的朋友可以尝试下,非常方便!
阅读全文
网站建设

浅析网站更换ip或使用CDN会不会影响SEO排名

最近张戈博客在阿里云和腾讯云服务器之间来回折腾了数次,别的收获没有,就悟出了一个问题:网站更换IP或使用CDN会不会影响SEO收录或排名? 收录就不好意思说了,张戈博客这几个月内发布的文章基本都没收录。 一、更换IP 记得之前站长平台分享过一篇相关的文章,说的是只要用户可以访问的页面,百度就能正常抓取和收录,和网站服务器在国内还是国外、是否备案统统无关。而百度收录的好坏、百度关键词的排名和网站的稳定性及加载速度则息息相关。 那这篇文章再说更换IP有何意义?我想说的是网站更换IP并不会影响收录或排名,但是——这个有一定的条件。 ①、平滑过渡 肯定有不少站长朋友,在网站搬家,并更新DNS解析后,立马就把原来的服务器退了或关闭了。其实这是一个大坑。 网站搬家过的朋友可能都有这样的经验,在网站搬家后,我们会按惯例去百度站长平台使用一下抓取诊断工具,看看新的解析是否生效。 而懒散的百度一直以蜗牛著称,我们会发现你更换DNS解析之后,抓取诊断中显示的还是老服务器的IP,可能几天都换不过来。这个应该百度蜘蛛自身的一个DNS缓存优化吧! 所以,如果你立马就把老的服务器给停用了,那百度蜘蛛绝对有一部分会遇到闭门羹,后果你懂的。 在我们更换IP之后,当使用百度抓取诊断工具发现IP未变更时,我们可以如图点击【报错】,让百度刷新DNS缓存: 快的话可能半天就可以刷新过来了,慢的话可能需要1~2天!快和慢的情况我基本都遇到过。。。 当发现抓取诊断显示IP已经是最新的之后,我们需要回到老的服务器上去看网站日志,观察个1~2天,直到日志中没有如下所示的百度蜘蛛的抓取了,才算更换成功! Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) 这时候你才可以从容的停止老的服务器。 ②、稳定快速 稳定快速作为网站的基本素质,基本就不用多提了,更换后的服务器如果又慢还经常50x,蜘蛛肯定不会喜欢。所以,更换也是往好的方向,而不是越来越Low B才行! 二、使用CDN 以前张戈博客一直会说使用CDN之后需要多解析一个搜索引擎线路给蜘蛛专用。主要当时是认为CDN的节点很多,而且是动态修改的。也就是说使用了CDN就类似于我们的网站经常在更换IP! 那上面都说了更换IP对SEO没影响,为啥使用CDN需要多解析一个搜索线路到真实IP呢? 其实道理很简单,也并不是为了规避我之前提到的CDN的IP变来变去的情况,而是为了稳定! 上文提到了,百度蜘蛛服务器存在DNS缓存的情况(其实很多公司或集群都会有DNS缓存机制),如果我们使用CDN而不对蜘蛛回源,那么百度蜘蛛DNS缓存的就是CDN节点的IP! 那缓存了CDN节点IP有什么不对吗?也可以访问到我们的网站啊? 确实,缓存了CDN节点IP对访问没有任何影响,但唯一致命的是,CDN的节点可能随时都会撤销会更换IP!也就是说,这一小时蜘蛛通过一个IP为x.x.x.x的CDN节点访问到你的网站,可能下一小时这个CDN节点就下线了或换IP了!那么蜘蛛就无法访问你的网站了,只能等DNS刷新才行,这一等可能就是一两天哟! 当然,这种情况也不多见。保守起见,我们还是新增一条搜索引擎线路解析到真实IP比较靠谱。 好了,浅析到此告一段落,望你能有所收获!
阅读全文