共计 2748 个字符,预计需要花费 7 分钟才能阅读完成。
关于本文
对于大多数朋友来说,目前网站的访问速度是很大的一个问题,如果能够更大限度的优化网站是每一位站长必须要考虑的事。
对于国内网站来说,由于域名已经备案,而且网站架设在国内服务器上,国内网友访问一般来说不会有太大的问题,除非服务器或自己的优化真的非常糟糕!
但是对于网站架设在国外或者没有备案的站长呢?那可以使用 CDN 服务,比如:Cloudflare。
但使用这些真的不错么?效果的确不错,但也有一些限制,比如需要修改 NS,或者收费,而且价格不便宜!
那么除了这些就没有其他方案了么?当然不是了,还可以自建 CDN 来使用!
自建 CDN 目的
自建 CDN,其实就是将自己手头多余的 VPS 等资源进行合理利用,若自己的 VPS 资源众多,甚至可以做到多节点,多区域网络覆盖,再通过如 DNSPOD 等智能 DNS 系统进行线路优化,合理的加快主站的访问速度,将访问进行分流。
比如主站服务器是 A,地域为美国,为了照顾国内用户访问,在香港有一台服务器 B,将它作为 CDN 服务器,所有静态资源均在 B 服务器存放一份,然后在用户访问时,根据访问者地域选择就近原则,国内用户访问服务器 B 的静态资源,国外用户访问主站资源,同时将这些资源设定浏览器缓存,这样就增加了一定的访问速度。
准备工作
首先必须至少有两台服务器或 VPS 等能够进行自主操作的资源,比如 A 和 B,A 站在美国,使用 WordPress,IP 地址:1.2.3.4,域名绑定:www.a.com;B 站在日本,空白网站,IP 地址:2.3.4.5,域名绑定:static.b.com。
网站主站架设在 A 服务器上(即所有网站内容,包含动态文件、数据库等),我们将在 B 站上架设 CDN 服务。
程序安装
由于 A 站上已经将服务环境架设好,网站也已经正常运行,同时也无需在 A 站上进行多余操作,故此,所有操作未进行说明均表示 B 站进行。
首先,自建 CDN 选择的是 ngx_cache_purge 这一模块,要运行这个模块,就需要服务器上安装有 Nginx,若之前安装过的,重新安装一次,加上参数即可。
下载相关软件
wget http://nginx.org/download/nginx-1.10.3.tar.gz
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxf nginx-1.10.3
tar zxf ngx_cache_purge-2.3.tar.gz
安装 Nginx
cd nginx-1.10.3
./configure --prefix=/usr/local/nginx --user=www --group=www --add-module=../ngx_cache_purge-2.3 # 因为各人需求不同,所以这里只是写了 ngx_cache_purge 模块,若有其他需求请自行参考 nginx 编译参数
make && make install
验证 ngx_cache_purge 安装
/usr/local/nginx/sbin/nginx -V
若出现了“–add-module=../ngx_cache_purge-2.3”字样表示已经安装完成
Nginx 配置
打开 nginx.conf 文件,在 HTTP 区域中添加如下内容
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_cache_path /data/wwwroot/static.a.com levels=1:2 keys_zone=cache_one:200m inactive=30d max_size=5g;
proxy_temp_path /data/wwwroot/static.a.com/tmp;
注意上面的“/data/wwwroot/static.a.com”,这是 B 站的网站路径
打开网站配置文件,在添加或修改如下内容,将静态文件进行缓存
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|js|css)$ {
proxy_pass http://www.a.com;
proxy_redirect off;
proxy_set_header Host www.a.com;
proxy_cache cache_one;
proxy_cache_valid 200 302 304 365d;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
add_header Images-Cache "$upstream_cache_status from $host";
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
access_log off;
log_not_found off;
expires max;
}
最后重新载入下 Nginx,当以后访问 static.a.com 时,B 站会先检查本地是否有缓存,若缓存存在则直接展示,若不存在则会访问 www.a.com,将资源保存下来进行展示。
网站程序配置
现在 CDN 架设好了,但是要怎样使用到网站上呢?
- 主站所有静态资源域名必须是 static.a.com
- static.a.com 域名必须正确指向 B 站
WordPress 替换法
如果网站使用的是 WordPress 程序,那可以很方便的对资源进行操作,其实也无需操作,就是把静态资源域名进行更改即可,反正 CDN 会自动拉取资源到本地!
打开本站模板函数文件“function.php”,在其中添加如下代码
if (!is_admin() ) {add_action('wp_loaded','lovekk_ob_start');
function lovekk_ob_start() {ob_start('lovekk_cdn_replace');
}
function lovekk_cdn_replace($html) {return str_replace('http://www.a.com/wp-content/uploads/', 'http://static.a.com/wp-content/uploads/', $html);
}
}
若本站安装有缓存插件,将缓存先清空一次,然后尝试打开网站,若 uploads 目录下所有静态资源均指向 static.a.com 域名,且访问正常,则表明 CDN 已经运行正常了!