自建CDN做图床

2023-05-11 11:19:58 浏览数 (2)

前期购入了UltraVPS的250g大盘鸡,但是速度上确实差强人意,所以考虑通过CDN的形式,后来在网上研究了一下,确定了利用Nginx反向代理的方案,实际上CDN节点估计也就是2-3个。

CDN建设意向

  • LS-JP节点:电信、联通用户,和机场属于同一节点
  • Vultr/DO-SPG节点:移动用户

实际上也是因为AWS和DO的码子比较好弄。

安装Nginx

直接用了LNMP一键包,比较方便,实际上只需要安装Nginx就行了

设置回源节点

假如我需要对imgki.com搭建CDN节点,数据放在source.imgki.com(130.255.78.xx),需要先修改hosts指向,告知CDN节点去哪里去获取网站数据,也就是回源地址,做如下修改:

代码语言:javascript复制
130.255.78.xx imgki.com

设置缓存目录

代码语言:javascript复制
#创建缓存目录
mkdir -p /home/wwwroot/imgki.com/cache
#设置缓存目录权限
chown -R www:www /home/wwwroot/imgki.com/cache

在nginx-conf增加

代码语言:javascript复制
proxy_cache_path /home/wwwroot/imgki.com/cache levels=1:2 keys_zone=imgki:150m inactive=130m max_size=150m;

/home/wwwroot/imgki.com/cache:为缓存目录
levels:指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层为2个字母。
keys_zone=Rats:50m:为缓存空间起个名字,这里取名为“Rats”,后面的50m指内存缓存空间
inactive=30m:如果30分钟内该资源没有被访问则删除
max_size=50m:指硬盘缓存大小为50MB
proxy_cache_valid:指定状态码缓存时间,前面写状态码,后面写缓存时间。

配置Nginx反向代理

置上有很多其实我也不是很明白,反着照着套过来就能用,看着也没有什么问题。

代码语言:javascript复制
location / {
proxy_pass https://imgki.com;
#把返回的302重定向的域名替换成你的。这里关闭
proxy_redirect off; 
#替换指定字符串
sub_filter source.imgki.com imgki.com;
#字符串只进行一次替换,即只替换第一个被匹配的字符串。这里关闭。
#sub_filter_once off;
#指定头部:
#proxy_set_header Host "imgki.com";
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
#防止谷歌返回压缩的内容,因为压缩的内容无法替换字符串
proxy_set_header Accept-Encoding ""; 
proxy_set_header Accept-Language "zh-CN";
#把cookie的作用域替换成你的域名
proxy_cookie_domain source.imgki.com imgki.com;
#启用proxy_cache缓存
proxy_cache imgki;
proxy_cache_valid 304 24h;
proxy_cache_valid 403 444 24h;
proxy_cache_valid 404 24h;
proxy_cache_valid 500 502 24h;
proxy_cache_use_stale invalid_header http_404 http_500 http_502;
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;

如果用的LNMP需要注释掉一些内容,否则会出现丢失CSS的情况

代码语言:javascript复制
#        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
#        {
#            expires      30d;
#        }
 
#        location ~ .*.(js|css)?$
#       {
#            expires      12h;
#        }

添加http的强制跳转

代码语言:javascript复制
return 301 https://imgki.com$request_uri;

2018.12.21补充proxy_cache模块的具体解释

代码语言:javascript复制
proxy_cache_path/data/nginx/tmp-test levels=1:2 keys_zone=tmp-test:100m inactive=7d max_size=1000g;  
proxy_cache_path 缓存文件路径
levels 设置缓存文件目录层次;levels=1:2 表示两级目录
keys_zone 设置缓存名字和共享内存大小
inactive 在指定时间内没人访问则被删除
max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。

0 人点赞