实现原理
这边先来对实现这一效果的三个主要工具做一下解释:
智能DNS解析:域名解析服务器根据来访者的特征类型进行抓取,并针对性的做出不同的解析。比较常见的DNS判断线路规则有:网络供应商判断(如:电信、网通、移动、教育网等),地域判断(国内、国外),搜索引擎判断(百度、谷歌、搜狗等)。国外的一些DNS服务商还提供不同国家的判断,以满足不同网络情况的访客的优质访问。
反向代理:反向代理(Reverse Proxy)方式是指定某一中间服务器请求目标服务器以抓取目标服务器上的内容,访客通过中间服务器间接访问目标服务器的内容。这样被我们成为镜像,这个在后面会讲到。http://www.hnanseo.com/1436.html
CDN:CDN的全称是Content Delivery Network,即内容分发网络,大家应该早就有听说过了。
通过上面三个东西,聪明的朋友就能很快立即到CDN的原理了。我们将不同的服务器部署在不同的网络环境中(地区、服务商),统一抓取并存储目标服务器上的内容,再通过智能DNS判断访客的网络环境,将访客引导到访问效果最佳的服务器进行访问。我们这边可以形象的把cdn服务器理解成我们源服务器的中继站,访客可以在离他们最近的中继站获取到目标服务器上的内容,而无需长途跋涉自己跑去目标服务器。
所需准备及适合人群
DNS解析服务商(如DNSPOD等各种免费DNS服务商)
中继服务器(镜像服务器)根据需要配置
适用人群:原服务器在香港或海外,或者原服务器负载能力有限,需要满足多地访问需求。(或者闲得无聊喜欢折腾)
注意:原服务器如果要被国内的镜像服务器抓取并展现,需要保证原服务器在国内有备案,否则会无法访问。
配置及部署
假设我们有需要给1个源站(A)域名:www.abc.com,分布两个镜像中继服务器(B、C),B的对象是国内用户,C的对象是国外用户。因为今天讲的是通过宝塔面板快速配置(比较简单,基本不需要代码操作),那么首先我们要在三个服务器上都安装宝塔面板(理论上源服务器装不装都无所谓)。宝塔面板安装非常方便,具体可以看他们的官网:http://www.bt.cn(安装请选择Nginx,如果镜像服务器不做其他用途可以不需要安装FTP、数据库等)。
安装完之后我们先进行DNS设置,在DNS解析中,我们将www的解析分为两个“线路”,第一个解析的线路选择“国内”,配置的IP为服务器B的IP地址;第二个解析的线路选择“国外”,配置的IP为服务器C的IP地址,如下图。这样设置完之后国内的用户访问我们的域名则会访问服务器B,国外的用户访问服务器C。
反向代理镜像设置DNS
那么这样存在一个问题:B、C两个服务器在抓取源站点信息的时候它们也会被DNS服务商转到自己的服务器上,导致它们无法正确抓取源站内容。所以这边我们就需要对B、C两个服务器的hosts进行修改。
如果是一般的VPS或者服务器,我们可以通过ssh登录服务器后进行输入以下命令修改主域名的hosts到我们源站的IP地址(附上ssh命令行新手操作指南):
vi /etc/hosts
服务器A的IP www.abc.com
但是由于我们使用了宝塔面板,我们可以直接在“文件”管理处编辑 /etc/hosts 文件,加上我们需要的记录。
添加完hosts记录之后,就是最重要的步骤:让服务器B和服务器C镜像源站服务器A的内容了。我们可以通过SSH登录B、C服务器ping一下主域名,看看IP地址是否已经为服务器A的IP地址。
我们在宝塔面板->网站处“添加站点”,正常添加站点,FTP、数据库这些都可以不需要设置,如下图。
反向代理镜像设置:镜像服务器添加站点
设置完之后我们可以在网站列表右侧对刚刚添加的新站点进行“设置”->“反向代理”,如下图:
反向代理镜像设置:反向代理设置
设置完之后我们需要重载nginx配置,在宝塔面板“软件管理”处找到nginx,点右侧的“设置”->“重载配置”即可。
5)设置ssl证书
注意:如果源站启用了HTTPS协议,那么镜像站点也需要部署HTTPS证书,我们可以在上面面板中SSL处,免费部署证书。不然会有502的错误,我们这里配置的域名和主站点是一样的,如果你直接在这里申请Let’s Encrypt证书会提示错误,但是主站点哪里是申请好的,我们可以直接复制过来,因为域名都是一样也就是解析的ip不一样,所以可以直接复制过来使用。
至此,所有需要的配置均配置完毕,等待解析生效后我们就可以通过ping我们的域名来测试是否生效,我们也可以借助第三方工具来检查不同线路、地区的访问是否已经路由到对应的服务器。
4、WordPress自动刷新缓存
对于Wordpress博客,如果启用CDN后页面被缓存,用户提交评论后无法马上显示出来,可以使用Ajax异步请求ngx_cache_purge接口(Bt(宝塔面板)默认已经安装好了ngx_cache_purge模块)当用户提交评论的时候则清除该页面缓存。只需要下面的这段js添加到footer.php
即可。不过一般现在的主题都支持Aja异步刷新。所以这段代码不一定需要。
- <script>
- $(document).ready(function(){
- $(“#submit”).click(function(){
- var uri = “https://www.daniao.org/purge” + window.location.pathname;
- $.get(uri,function(data,status){
- return true;
- });
- });
- });
- </script>