前言
hostdare
快过期了,决定放弃这个服务器,迁到阿里香港去。其他两个网站迁移很容易,博客迁移我已经做过好多次了,还总结出了一篇教程;工具站更简单,本身就是一个静态站,打包带走就行。唯有图床是个问题,当初用的是Auxpi程序,功能强大,但安装起来很麻烦,迁移起来更是让人无从下手。
尝试了几次,决定放弃了,干脆新建个图床吧,反正原来的图床也没放什么东西(而且大部分是上传到公共图床上的)。那么问题来了,这次我要选什么图床程序?
大致想了想,它至少要满足以下条件:
- 安装简单,我可不想再花太长时间搞一个bug丛生的程序了
- 颜值舒服
- 可迁移,这次的图床我可能会放一些重要资料了,必须保证能容易地迁移。
- 支持api,本地写完文章之后,配合前一段时间写的自动上传程序,再也不用手动一个个上传了。
- 方便查看和管理图片
至于聚合公共图床接口,其实仔细思考一下是没有必要的,毕竟免费才是最贵的。当初多少人信誓旦旦认为微博图床稳的一匹,4月份的时候还不是说关就关?数据还是放到自己手上才安心。
基于这个标准,我在github上找了找,决定选用lsky程序,它有以下特性:
- 支持第三方云储存,支持本地、阿里云 OSS、腾讯云 COS、七牛云、又拍云。
- 支持多图上传、拖拽上传、上传预览、全屏预览、页面响应式布局。
- 简洁的图片管理功能,支持鼠标右键、单选多选等操作。
- 强大的图片预览功能,支持响应式。
- 支持全局配置用户初始剩余储存空间、支持单个设置用户剩余储存空间。
- 支持一键复制图片外链、二维码扫描链接。
- 支持设置上传文件、文件夹路径命名规则。
- 支持图片鉴黄功能。
- 支持文件夹分类功能。
- 对外开放的上传接口。
最关键的是安装简单!基本就和typecho
一样简单,就决定是你了!
安装lsky
依赖
- PHP 版本 ≥ 5.6(建议使用PHP7+)
- mysql 版本 ≥ 5.5
- mysqli 支持
- fileinfo 拓展
- curl 拓展
- rewrite
用宝塔,很容易就能搭建好一个LNMP
环境,然后去软件商店
,点开php
设置,转向安装扩展
,安装fileinfo
扩展即可。
curl
我服务器上好像是自带的,如果安装过程中提示缺少curl
,可以参考以下方法安装开启:
yum -y install curl # centos
apt install curl # ubuntu/debian
然后进入php设置中找到配置文件
,把curl
前面的注释去掉
[scode type="red"]博主没有遇到curl缺失的问题,所以上述方法也没有测试,如果您发现该方法不可行,欢迎留言告诉我。[/scode]
安装
- 下载lsky最新版,上传至 web 运行环境,解压。
- 设置运行目录为 public。
- 配置 Rewrite 规则:
- Nginx:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
- Apache:无需修改
- 访问首页,未安装自动跳转至安装页面,根据页面提示安装即可。
- 安装完成以后请设置 runtime 目录755权限,如果你使用本地存储,public 目录也需要设置为755权限
更新
- 下载最新版程序并解压到本地。
- 将旧版程序
config/db.php
文件复制到新版程序的config
文件夹,如果你使用的是本地储存策略,文件是储存在本地的,请注意也要将你旧版本的图片资源移动到新程序对应的目录。 - 删除旧版本程序所有文件,上传最新版程序到站点根目录即可(这一步也可以直接覆盖,但会有残留文件,不选择覆盖的话建议先打包备份旧版本)。
- 使用管理员账号登录,访问任意页面会跳转到升级数据库结构页面,根据提示操作即可。
FAQ:如果覆盖更新文件后无法重定向到更新页面,或首页出现错误,请直接访问 http://域名/install/update.html
进行更新。
迁移
和更新类似。但是多了几步:
- 备份你的数据库,并导入到新服务器中的数据库。
- 修改旧版程序
config/db.php
,将数据库相关配置改成新数据库的配置。 - 按照更新流程走一遍
完美!
接入CDN
为什么
虽然说数据要放到自己手里才安心,但是放到自己小水管上访问速度慢,放到阿里OSS,腾讯COS,七牛,又拍上又担心第二天起来的时候破产了。这样一来,CDN就成了成本较低的一种选择。我们可以以阿里OSS与阿里CDN的价格做一个对比。
这是OSS的价格:
相比之下,CDN的流量包是18元/100g/1年,1.2T就是216元,而对应的100g/月的OSS是441元,贵了一倍,这还不算存储费用(虽然存储便宜)。正好我还有个阿里1M,平时也就做一些采集,可以用来放图床。
解释一下CDN,CDN 的全称是 Content Delivery Network,即内容分发网络。简单来说,它就是把源站的部分资源缓存到各个节点的服务器上,用户访问网站时,可以就近获取这些资源,不仅加快了用户的访问速度,还有效降低了网站被搞瘫痪的风险(真实ip被隐藏起来了)
另外忘了说了,接入国内CDN是必须要备案的,正好,我也有个已备案域名。
废话不多说,开搞!
准备
首先开一个CDN服务。这没什么好说的,去百度云找到CDN服务,然后开通即可。貌似需要实名,不过应该也挺快的。两种计价方式任选一种,不过按流量计费
更适合我们这些做博客的,当然你也可以直接买流量包。
我为什么不用阿里云呢?因为阿里云现在没有带宽封顶这个设置了,只能靠监控来提醒异常流量,试想要是晚上睡觉的时候被攻击了……百度云不仅有带宽封顶,还有有一欠费就停止服务的规定,损失还是可控的。阿里只有欠费二十四小时之后才停止服务……不敢想象24小时能打多少流量。为什么不用腾讯云呢?因为我还想留着我新用户的身份,再过几年参加活动呢……
然后就是准备两个子域名(当然你要用主域名也是一样的),我这里是pb.yanshu.work
和st.yanshu.work
,pb
是图床网站(我们称为源站域名),st
就是加速网址啦(也就是放到CDN上的网址)。
添加域名
准备好之后,就在百度云控制台里添加新域名
。
然后输入信息。业务分类选图片小文件加速
,加速域名就填st
,源站域名就是图床网址pb
,点下一步会跳到缓存配置,也可以直接选“完成”,后续再进行配置。我这里已经创建好就没法下一步了,所以在缓存配置里进行演示。
缓存时间的意思是过多少天CDN再从源站获取更改,我们上传的图片一般不会发生变化,所以时间可以设置得尽可能长一些。
配置好后,百度会给你一个CNAME域名
,回到你的域名服务商,添加一个主机记录为st
的CNAME记录,把CNAME域名
填到记录值中,过一会就ok了。
添加CDN
登录图床,添加存储策略中本地
的CDN加速域名
保存后,你会发现图床的链接都变成st.yanshu.work/*
了。但是问题来了,这些链接打不开啊!
我也不知道是什么情况,摸索了一个下午,才找到了一个解决方案:
在宝塔中新建一个st.yanshu.work
站点,修改CDN里的回源配置为pb.yanshu.work
,这下终于能访问了!速度还很快,基本能跑满带宽。(第一次打开可能有些慢,等CDN缓存好就快了)
判断CDN生效的方法:ping一下加速域名,如果显示的ip地址不是你服务器的地址,就代表CDN启动了
回源地址为www.domain.com 回源Host为host.upyun.com。那么实际回源是请求到www.domain.com解析到的IP,对应的服务器上的站点是host.upyun.com 。——摘自网络
那么问题又来了,万一有一天图床受到攻击,CDN自动停止了,我想要它自动切换到源站,该怎么办呢?我试着手动停止了CDN,果不其然图片链接又不能访问了。
仔细想想,CDN停了之后,那么st.yanshu.work
上就没有任何内容了,无论怎么都不可能返回源站的网址啊。301跳转呢?试了一下也不行。
于是我就开始看百度云CDN的文档,在带宽阈值设置
这一节中,有段话引起了我的注意:
配置项说明:
- 带宽封顶:默认带宽阈值为10Gbps。
- 访问限速:当带宽超出指定阈值时,动态调整该域名涉及的所有节点流量,进行限速,将带宽控制在阈值范围内;适用于防止普通异常情况发生,不影响用户的服务。
- 访问返回404:当带宽超出阈值时,将对访问请求返回404页面,域名本身运行状态不变;适用于抵抗超强 DDoS 攻击,保护用户的源站。
- 访问回源:当带宽超出指定阈值时,将域名下所有访问切回源站,CDN转为关闭状态;适用于控制 CDN 费用,不影响用户的服务。
也就是说,理论上讲我这种想法应该是能实现的,CDN开着的时候就通过CDN访问,CDN关着的时候就直接访问源站……源站!对了,我可以直接将加速域名st.yanshu.work
的站点直接设到源站上啊,这样关闭CDN的时候不就是直接访问源站了吗?
说干就干,我把st.yanshu.work
的网站目录修改为pb.yanshu.work
,并把运行目录改为public
试了一下,成功了!开CDN的时候速度飞快,关闭的时候,虽然慢了点,但也是能访问图片的。
设置防盗链
毕竟CDN的流量费用也是很贵的,如果被别人随意引用那可真是为他人做嫁衣了,所以有必要设置防盗链。
设置起来也很简单,在访问控制里
就可以添加。
那么问题又又又来了,设置防盗链之后,其他网站测试的结果还是照样显示啊!我都快绝望了,CDN好麻烦啊。
不过我还是继续振奋起来找办法,搜了好久,偶然在网上看到这篇文章。文中提到用阿里云CDN之后也出现了防盗链不起作用的情况,后来发现是没有配置https的缘故。赶紧加个SSL试试。
不过百度云的https证书还挺难找的,首先你要点进管理我的证书
接着选申购SSL证书
,然后在一众收费证书中,找到trustasia
的域名型DV
的单域名版
,只有它是免费的……
然后进入证书列表,点击证书申请
只用填加速域名st.yanshu.work
即可,其他什么信息都不用填。注意验证方式一定要选DNS验证!
然后按照提示在域名服务商里做相应解析,过一段时间(大概十分钟)就显示“申请成功”了。接下来你就可以重新返回CDN界面部署你的证书了。
强制跳转也勾选上,回源协议选https。
然后回到宝塔给pb.yanshu.work
也加上https,开启强制启用https。再把图床的CDN地址改成https://st.yanshu.work
完美!
回过头看看其他网站的引用……艹怎么还是能显示。
哦对,链接忘记改成https了。但即使是这样,http能引用还是让我很不爽。
暂时也没办法了,看看以后能不能解决吧。
[scode type="yellow"]1027更新:我发现其实也是有办法的,就是把空Referer关掉,这样的话http也不能引用了。不过也就不能复制图片链接到浏览器中查看了[/scode]
后记
我当然不是钱多得没地方烧,等到百度云加速审核通过以后,我就换到免费的云加速上。
版权属于:作者名称
本文链接:https://www.sitstars.com/archives/51/
转载时须注明出处及本声明
有用,等我有备案了也来搞一个图床 ::aru:thumb::
原谅糖 2019-10-27
hhh我总觉得应该有更直接的方法,但是在网上也没找到,只能这样凑合着用了
雁陎 2019-10-27 回复 @原谅糖