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

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

前言 说到自建 CDN,博主一直觉得有点复杂,毕竟需要考虑的因素太多。不过,以前博主习惯使用 Cloudflare 的免费 CDN 来加速网站,效果不错,但最近 Cloudflare 确实时常出现一些不稳定的情况,特别是在高峰时段,偶尔会“抽风”,导致网站访问受影响。 另外,博主也发现了 VMRac

前言

说到自建 CDN,博主一直觉得有点复杂,毕竟需要考虑的因素太多。不过,以前博主习惯使用 Cloudflare 的免费 CDN 来加速网站,效果不错,但最近 Cloudflare 确实时常出现一些不稳定的情况,特别是在高峰时段,偶尔会“抽风”,导致网站访问受影响。

另外,博主也发现了 VMRack 提供的 CDN 免费试用方案,尤其适合国内用户访问。VMRack 每个月会赠送 30GB 的 CDN 流量,对于小型网站来说,完全能够满足日常使用需求。且其在国内的访问速度表现非常优秀,如果你正在寻找一款替代 Cloudflare CDN 解决方案,VMRack 值得一试。

二、自建CDN搭建环境说明

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

2、自建CDNVMRack美国洛杉矶服务器的三网精品VPS,国内速度快。

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

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

5、加速网站,https://www.vmrack.net/

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

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

国内用户访问自建CDN,也就是VMRack美国洛杉矶服务器的三网精品VPS,国外用户访问Cloudflare CDN,进行全面加速。

默认解析到自建CDN的VMRack美国洛杉矶服务器的三网精品 IP,国外解析解析到CF的加速IP。

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

四、自建CDN实现方法

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

1、自建cdn的VMRack美国洛杉矶服务器的三网精品VPSIP解析,进行回源操作

38.192.1.xxx https://www.vmrack.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/vmrack.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.vmrack.net;
ssl_certificate /usr/local/nginx/conf/ssl/vmrack.net/fullchain.cer;
ssl_certificate_key /usr/local/nginx/conf/ssl/vmrack.net/vmrack.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://vmrack.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,那么VMRack美国洛杉矶服务器的三网精品vps上是否能使用Let'sEncrypt的免费SSL问题呢?

经过博主的测试,Let'sEncrypt可以多次签发的。vmrack.net源站SSL用的IP解析的方式签发的,VMRack美国洛杉矶服务器的三网精品VPS签发SSL时可以使用DNSAPI获取,能成功。

另外,建议自建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/vmrack.net.conf 文件,在相应的位置添加以下代码。

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

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

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

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

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

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

不过博主还是建议手动清除缓存。

总结

虽然自建 CDN 确实麻烦,涉及到各种配置和维护问题,但折腾的过程确实非常有意义。它不仅能帮助我们更深入地理解代码,还能提升自己的动手能力,解决实际问题。但如果你不想自己折腾,或者觉得这些操作太复杂,博主还是建议大家尝试一下 VMRack 的 CDN 服务。现在,他们正推出免费的 CDN 流量赠送活动,完全可以满足小型网站的加速需求。这也是 VMRack 为了回馈新老用户的一个特别活动,值得尝试!

LICENSED UNDER CC BY-NC-SA 4.0
评论