前言
说到自建 CDN,博主一直觉得有点复杂,毕竟需要考虑的因素太多。不过,以前博主习惯使用 Cloudflare 的免费 CDN 来加速网站,效果不错,但最近 Cloudflare 确实时常出现一些不稳定的情况,特别是在高峰时段,偶尔会“抽风”,导致网站访问受影响。
另外,博主也发现了 VMRack 提供的 CDN 免费试用方案,尤其适合国内用户访问。VMRack 每个月会赠送 30GB 的 CDN 流量,对于小型网站来说,完全能够满足日常使用需求。且其在国内的访问速度表现非常优秀,如果你正在寻找一款替代 Cloudflare 的 CDN 解决方案,VMRack 值得一试。
二、自建CDN搭建环境说明
1、源站放在kimsufi独立服务器上,硬盘大,价格便宜。但缺点也非常明显,就是国内速度慢。
2、自建CDN是VMRack美国洛杉矶服务器的三网精品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/path3、编译 /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配置中,重要参数说明如下:
/home/cache/path: 为缓存目录
levels: 指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层为2个字母。
keys_zone=cache_one:256m: 为缓存空间起个名字,这里取名为“cache_one”,后面的256m指内存缓存空间 。
inactive=1d: 如果1天内该资源没有被访问则删除。
max_size=10g: 指硬盘缓存大小为10GB。
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时可以使用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/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 为了回馈新老用户的一个特别活动,值得尝试!