自建CDN从零基础开始搭建 辅助Cloudflare加速

作者: maofun 分类: 代码 发布时间: 2020-02-18 18:34

自建CDN进行网站加速有想过没?闲吧给大家分享下自己自建CDN,并结合Cloudflare对网站进行加速的案例。

一、前言

说起自建CDN,闲吧一直觉得很难。之前习惯使用了Cloudflare免费CDN进行加速网站,但现在Cloudflare经常会出现抽风。

另外,国际阿里云目前有1年的新用户试用方案,速度上可以选择香港机房,国内访问优秀。不易注册的用户完全可以花几十块钱买成品号,呵呵!

二、自建CDN搭建环境说明

1、源站放在kimsufi独立服务器上,kimsufi毒妇有点就是毒妇,硬盘大,价格便宜。但缺点也非常明显,就是国内速度慢。

2、自建CDN是阿里云国际试用香港VPS,国内速度快。

3、源站和自建CDN均是LNMP一键包搭建的web环境。

4、Cloudflare是利用partner接入,可以cname和IP解析进行加速。PS:没有的用户可以使用闲吧搭建的,地址:https://cdn.xianba.org。

5、加速网站,https://virmach.net/ 。

6、SSL用的Let’sEncrypt免费SSL。

三、自建CDN配合Cloudflare加速思路

国内用户访问自建CDN,也就是阿里云国际香港VPS,国外用户访问Cloudflare CDN,进行全面加速。

这点只需使用国内的DNSPOD进行解析即可。默认解析到自建CDN的阿里云香港VPS IP,国外解析解析到CF的加速IP。

那么问题来了,现在关键是如何搭建自建CDN,即阿里云香港VPS加速源站,访问的内容和源站一致。

四、自建CDN实现方法

闲吧采用的nginx的反代,实现自建CDN。具体方法如下:

1、自建cdn的香港VPS进行制定IP解析,进行回源操作

修改 /etc/hosts 文件,添加如下内容:

192.168.1.xxx www.virmach.net virmach.net  //ip修改为源站IP。

2、在自建CDN的香港VPS上创建缓存目录

mkdir -p /home/cache/temp
mkdir -p /home/cache/path
chown -R www:www /home/cache/temp
chown -R www:www /home/cache/path

3、编译 /usr/local/nginx/conf/nginx.conf 文件

在http段加入如下代码:

#limit_conn_zone $binary_remote_addr zone=perip:10m;
##If enable limit_conn_zone,add “limit_conn perip 10;” to server section.

#client_body_buffer_size 32k;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_buffer_size 64k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 256k;
proxy_temp_path /home/cache/temp;
proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache_one:256m inactive=1d max_size=10g;  //和上面的是一行哦

很明显,主要是最后的两行参数,这里稍后再解释。

4、编译  /usr/local/nginx/conf/vhost/virmach.net.conf 文件

在对于的位置加入以下代码:

listen 443 ssl http2;
#listen [::]:443 ssl http2;
server_name virmach.net;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/www.virmach.net;

ssl_certificate /usr/local/nginx/conf/ssl/virmach.net/fullchain.cer;
ssl_certificate_key /usr/local/nginx/conf/ssl/virmach.net/virmach.net.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers “TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5”;
ssl_session_cache builtin:1000 shared:SSL:10m;
# openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;

location / {
proxy_set_header Accept-Encoding “”;
proxy_pass https://virmach.net;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache cache_one;
proxy_cache_valid 200 304 30m;
proxy_cache_valid 301 24h;
proxy_cache_valid 500 502 503 504 30s;
proxy_cache_valid any 1s;
proxy_cache_min_uses 1;
expires 12h;
}

以上代码如何您加速的是http就放相应的代码块,如果您加速的是https就放到相应的代码块,闲吧反代的院长是https的,因此放在443端口的代码块。

这里提醒下,80端口直接301到443端口,代码如下:

rewrite ^(/.*)$ https://virmach.net$1 permanent;

经过以上修改后,基本算完成了。

以上自建CDN配置中,重要参数说明如下:

    1. /home/cache/path: 为缓存目录
    2. levels: 指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层为2个字母。
    3. keys_zone=cache_one:256m: 为缓存空间起个名字,这里取名为“cache_one”,后面的256m指内存缓存空间 。
    4. inactive=1d: 如果1天内该资源没有被访问则删除。
    5. max_size=10g: 指硬盘缓存大小为10GB。
    6. proxy_cache_valid: 指定状态码缓存时间,前面写状态码,后面写缓存时间。

5、重启LNMP,然后自建的反代CDN生效

执行命令:lnmp restart

完成后,访问下,看是否反代成功。另外,可以到反代缓存目录看下是否有缓存文件。

如何成功了,到DNSPOD上进行相关解析,即可完成自建CDN和CF一起为网站加速了。

五、关于自建CDN解决SSL问题

源站用的Let’sEncrypt免费SSL,那么香港vps上是否能使用Let’sEncrypt的免费SSL问题呢?

经过闲吧测试,Let’sEncrypt可以多次签发的。virmach.net源站SSL用的IP解析的方式签发的,香港VPS签发SSL时可以使用DNS的API获取,能成功。

另外,建议自建CDN站通过本地调试的方式先配置好【修改本地电脑的host文件】,之后再去修改DNS解析。

六、关于自建CDN缓存的清理问题

经过闲吧测试,目前还没有很好的解决,只能通过手动的方式进行搞定。实现方法如下:

1、安装nginx的ngx_cache_purge模块

具体安装ngx_cache_purge模块教程可以去 https://www.vpsrr.com/lnmp-install-ngx_cache_purge/ 看看。

这里特别提醒下,对照lnmp的版本,路径和参数稍微有点不一样。

2、配置清除缓存路径

编译  /usr/local/nginx/conf/vhost/virmach.net.conf 文件,在相应的位置添加以下代码。

location ~ /purge(/.*) {
#deny all;
proxy_cache_purge cache_one $host$1$is_args$args ;
}

很明显,是通过访问路径的方式进行清理。即添加purge参数即可,如清除https://virmach.net/xxx.html页面缓存,只需访问https://virmach.net/purge/xxx.html即可。

七、自动清除自建cdn缓存的办法

大佬们给出了自建cdn自动清除代码的方法,即提交数据时访问以上代码。具体代码如下:

<script>
$(document).ready(function(){
$(“#submit”).click(function(){
var uri = “https://virmach.net/purge” + window.location.pathname;
$.get(uri,function(data,status){ return true;});
});
});
</script>

注意修改代码中的网址。将virmach.net替换为自己的地址。

不过,以上代码,经过闲吧的测试,无法成功,不知道原因,这里只做测试分享。建议还是手动清除缓存。

八、自建CDN总结

自建CDN虽然麻烦,还会有各种问题,不过折腾还是很有意义,大家可以访问virmach.net试试,基本是秒开。作用相对的明显,不过目前阿里云国际香港VPS的试用IP带宽还是太少了,嘿嘿~

另外,闲吧会不断完善这个自建CDN教程,有疑问的网友们,欢迎留言。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注