从CDN和云储存开始
这里采用七牛云CDN和阿里云服务器和组合,想要自建图床,你必须有一个已经在运营的服务器,以及一个已经经过ICP备案的域名
七牛云官网:点击这里
想要开始你的自建图床,你必须找一个地方储存你的图片,这里我采用七牛云
注册账号,实名认证以后,请你打开以下界面

找到左侧边栏的对象储存Kodo。在空间管理界面选择新建空间,就如下面的图片一样:

[!TIP]
记得选择公有空间,否则你的网站可能访问不了,至于鉴权以及防止盗链问题,我们后面会做设置
名字请你随意,比如blog-xxxxxxxx这样,储存区域请根据你网站的服务器地址来
点击确认即可~,这样储存空间就建好了
接下来点击你空间的名字,在空间里面新建目录,既然是图床,那我们建一个image/目录吧
CDN设置
找到左侧边栏的CDN选项,点击进入CDN界面,现在你应该能看到以下界面:

接下来你应该做的是,打开左侧边栏的域名管理,找到添加域名的按钮
非常好!接下来我们添加域名,这里需要用上你已经做过ICP备案的域名,现在,请你点击左上角的添加域名按钮
你应该能看到如下界面

在加速域名一栏,填上你的图床域名
[!NOTE]
什么?你不知道填什么?我可以给你一个小小的建议,既然我们是一个图床域名,那为什么不使用img.xxxx.xxx这样的二级域名?
源站配置处选择七牛云存储,下面的下拉框请选择你刚刚建好的空间
接下来一切默认,在缓存配置处选择使用推荐配置即可
点击创建
这样就创建好了!

接下来找到CNAME下面的这个小链接,复制这个信息:

接下来我们回到阿里云
阿里云地址:点击这里
设置CNAME
在阿里云控制台找到域名与网站的设置界面,有一个云解析DNS,请你找到这个按钮
点击你网站右边蓝色的解析设置,找到下图中的添加记录:

- 记录类型:CNAME
- 主机记录:填上你的图床域名(就比如刚刚我提议的img.xxxx.xxx,就填写img)
- 记录值,你刚刚复制的内容(七牛云上CNAME下面的这个小链接)
确定!
这样就做完了!恭喜你现在拥有了自己的图床,你只需要把你的图片上传到image/目录中,就可以在任何地方直接调用了!
现在在七牛云,你的CNAME下方应该显示已配置,状态是成功
但是这样又会出现一个问题:任何人都可以直接使用你图床中的文件,这样就会产生非常大的困扰。你的CDN会莫名其妙的跑掉非常多的流量,这都是真金白银,我绝对不建议你这样在互联网上裸奔,我们接下来应该设置防盗链,防止随意被人调用
防盗链(非常重要!!!!!)
回到七牛云的域名管理界面,你可以看到在你域名的最右边,有一些操作:

点击这之中的配置按钮
找到访问控制下面的Referer 防盗链,点击修改配置,你会看到下图的窗口

在蓝色方框(蓝色是我打的码)处填写你主站的域名,比如
- www.xxxxx.com
- xxxxx.com
不同的域名要跨行,是否允许空 Referer选择关闭
点击确定
[!WARNING]
注意,这样并不能保证你的资源绝对安全,但是如果你只是个小站或者个人站,这样的措施是足够的
如果你是大型网站,那么我强烈建议加入时间戳(怎么做请自行百度)
现在开始,别人就不能通过外链直接访问你的资源了
图片瘦身和流量控制
当你上传一些图片以后,你会发现跑走的流量非常多,一个原因是因为https请求所产生的流量费,另一部分是因为流量大小是会依据你图片的大小来的,你的图片越大,跑的流量自然越多
这会让你钱包受到非常大的考验(不是
那么怎么解决这个问题呢,我们需要使用到两个功能,都在七牛云控制台内部操作即可
首先,请在打开对象储存——空间管理界面,找到你图床所在的空间
[!INFO]
其他内容待更新
随机图片API
好的,现在找到你的网站后台(up使用的是宝塔),文件管理界面,进入你网站的根目录
在根目录下创建一个api/文件夹
接下来在api文件夹内,给你的api取一个名字,比如imgapi.php
将下方的这段代码复制到你的php文件中:
<?php
$referer = $_SERVER['HTTP_REFERER'] ?? '';
if ($referer) {
$host = parse_url($referer, PHP_URL_HOST);
} else {
$host = '';
}
$allowed = ['xxxxxxx.com', 'www.xxxxxxx.com']; //这里填写你网站的真实域名,否则无法访问
if (!in_array($host, $allowed, true)) {
http_response_code(403);
exit('Forbidden');
}
// 读取 photos.txt 文件,每一行作为一个元素
$lines = file('photos.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$urls = []; // 存储链接
$weights = []; // 存储权重
foreach ($lines as $line) {
// 按空格拆分:第一个部分是URL,第二个部分是权重(可选)
$parts = explode(' ', trim($line));
$url = $parts[0]; // 链接
// 如果存在权重则取用,否则默认权重为1
$weight = isset($parts[1]) ? intval($parts[1]) : 1;
// 限制权重范围在 0~100
if ($weight > 100) $weight = 100;
if ($weight < 0) $weight = 0;
// 保存数据
$urls[] = $url;
$weights[] = $weight;
}
// 计算总权重
$totalWeight = array_sum($weights);
// 如果总权重为 0,则说明全部权重为 0,默认使用等概率
if ($totalWeight == 0) {
$weights = array_fill(0, count($urls), 1);
$totalWeight = array_sum($weights);
}
// 生成一个 1 ~ 总权重 之间的随机数
$rand = rand(1, $totalWeight);
// 根据权重找到对应的链接
$accumulated = 0;
$selectedUrl = $urls[0]; // 默认第一个
foreach ($urls as $i => $url) {
$accumulated += $weights[$i];
if ($rand <= $accumulated) {
$selectedUrl = $url;
break;
}
}
// 重定向到选中的链接
header("Location: " . $selectedUrl);
exit;
?>
接下来,在相同目录(即api目录下),新建photos.txt文件
将你的所有图片直链以每个一行的形式放在txt文件中,比如这样:
https://img.xxxxxxxxx.com/img/img001.png
https://img.xxxxxxxxx.com/img/img002.png
https://img.xxxxxxxxx.com/img/img003.png
https://img.xxxxxxxxx.com/img/img004.png
https://img.xxxxxxxxx.com/img/img005.png
调用API
如果你严格按照上方的步骤做了,你的API地址应该是:
www.你的域名.com/api/imgapi.php
API权重功能(可选,但未经过测试)
如果你对某些图片特别钟爱,你可以给它加上权重,让它的刷新率变得更高
权重增加方法:打开photos.txt,在你的图片直链后方空格,写上权重数字
权重范围:[0,100],超过100的也会被记录为100,小于0的会被记录为0
下面是一个例子:
https://img.xxxxxxxxx.com/img001.png 100
这句话的意思是设定该图片权重为100,它的刷新率将变得极高
如果后方没有数字,即使用默认权重1
其他功能待开发

Comments NOTHING