外部存储
ImgURL Pro目前支持本地、Backblaze B2、腾讯云COS、FTP、七牛云等存储方式。
存储方案
ImgURL Pro目前支持本地、Backblaze B2、腾讯云COS、FTP、七牛云等存储方式(后期可能将支持更多)
在后台 - 系统设置 - 存储方案可以看到所有存储设置。
存储方案选择
- 本地:上传效率最好,但是会占用服务器磁盘空间和网络资源
- Backblaze B2:服务器在美国,如果你图床服务器也在美国可以使用B2,如果图床安装在国内服务器速度会非常慢
- 腾讯云COS:建议国内服务器使用
- FTP:比较灵活,建议选择和图床服务器较近的区域。比如你图床安装在国内服务器,FTP建议也是国内的。
- 七牛云:免费10G空间和10G下载流量
注意事项
本地存储和FTP存储,域名设置后面没有斜杠(/)外,其余的存储在设置的时候必须有斜杠(/),否则会存在异常。
其它说明
- 如果游客上传设置为“否”,则游客无法选择该上传方式,管理员依然可以选择。
- 如果开关为“关闭”,则无论是管理员还是游客都无法选择该上传方式。
本地存储
本地存储图片是保存在服务器的,会占用服务器磁盘空间、带宽等资源,该存储是默认的(无法关闭上传),一般不需要额外设置,如有需要可以单独为本地存储绑定一个CDN域名。(注意:本地存储的域名最后没有斜杠(/))
绑定CDN域名思路
假设您创建了一个站点A,并将图床安装到了A,如果希望图片通过CDN域名来访问,只需要做如下操作。
- 在站点A额外绑定一个域名B
- 然后到第三方CDN服务商(如CloudFlare)对域名B启用CDN加速
- 最后打开ImgURL后台 - 系统设置 - 存储方案 - 本地 - 填写B域名并启用
Backblaze B2
关于Backblaze
Backblaze是一家国外的备份、存储提供商,B2存储有免费10G的额度,价格非常低廉,如果存储1G的数据,仅需5$/月,如果有需要的可以前往:https://www.backblaze.com/ 进行注册。
获取密钥
登录之后在后台B2云存储 - 创建一个桶 - 权限设置为公开,如下图。(如果您打开不是中文界面,可以在B2网页右下方设置为中文语言)
接下来我们需要获取4个重要的参数,用于B2 API设置。
打开后台B2云存储 - App Keys,同时点击“生成新的主应用程序密钥”(只会出现一次,请妥善保存)
上面我们已经获取到“KeyID”和“主程序密钥”2个参数了,继续切换到“B2云存储” - 桶,可以查看到刚刚创建的桶“imgurl”有一个“桶身份证”把它记录下来。
接下来点击“上传/下载按钮”往里面随便传一个文件,点击文件详情,获取友好的URL地址,比如:https://f002.backblazeb2.com/file/imgurl/imgs/2019/06/a91bf049535ce20a.jpg
我们只需要https://f002.backblazeb2.com/file/imgurl/ 这部分就行了,这样我们4个参数已经获取完毕,分别是是:<KeyID><主程序密钥><桶身份证><友好URL>
修改配置文件
打开站点根目录的config.php
,填写对应的信息,只需要填写下面三项(其余选项不填写):
- $config['b2']['b2_app_key_id']:对应KeyID
- $config['b2']['b2_app_key']:对应主程序密钥
- $config['b2']['b2_bucket_id']:对应桶身份证
启用B2存储
打开ImgURL后台 - 系统设置 - 存储方案 - 对B2存储进行设置,绑定域名填写上面获取到的“友好URL”,并开启允许上传。
启用CloudFlare CDN
如果需要对B2存储启用CloudFlare CDN可以参考:Backblaze B2,低价的对象存储,支持接入CloudFlare CDN
注意事项
- 绑定域名末尾需要带有斜杠(/)
- B2服务器在美国,适用于您图床也是安装在美国服务器上,否则请求接口延迟会非常高,会大大降低图片上传速度,同时还影响上传成功率。
腾讯COS
COS是腾讯提供的对象存储服务,全称为Cloud Object Storage,COS
新建bucket
在腾讯云后台 - 根据提示创建存储桶 - 存储桶权限为“公有读私有写”。
获取密钥
直接访问:https://console.cloud.tencent.com/cam/capi 获取需要的密钥信息,如果没有自行点击新建密钥即可。
这个页面我们需要3个参数,分别为<APPID><SecretId><SecretKey>
把它保存下来。
获取COS地域
在创建存储桶的时候会让你选择存储桶的地区,对应地区域名列表,请参考:https://cloud.tencent.com/document/product/436/6224
假如存储桶地区为“广州(华南)”我们需要的地址为“cos.ap-guangzhou.myqcloud.com”
修改配置文件
打开站点根目录下的config.php
找到腾讯COS设置,填写对应的信息:
-
$config['cos']['app_id']
:对应APPID -
$config['cos']['access_key_id']
:对应SecretId -
$config['cos']['access_key_secret']
:对应SecretKey -
$config['cos']['host']
:对应可用地域(比如:cos.ap-guangzhou.myqcloud.com)
启用腾讯COS
打开ImgURL后台 - 系统设置 - 存储方案 - 腾讯COS - 设置COS绑定域名并进行启用即可。
注意事项
- 绑定域名末尾需要带上斜杠(/)
-
写到
config.php
配置的时候bucket不需要带有-数字
- 在新建bucket的时候,地区请选择和您图床服务器较仅的区域。比如您图床安装在广州的服务器上,那么创建bucket的时候区域建议选择广州。
- 假如您图床安装在国外的服务器,但是新建一个国内区域的bucket,将导致上传成功率和速度下降。
FTP
在使用FTP存储之前,请确保已经有正常可用的FTP服务,同时确保PHP已经支持FTP组件,可以在ImgURL Pro后台首页查看是否支持FTP组件。
适用场景
FTP存储方式非常灵活,可以将图片存储在你想要的服务器上。比如您图床安装在A服务器,绑定了A域名,但是希望将图片上传到B服务器,使用B域名来访问图片,您只需要:
- 在B服务器新建一个站点,绑定B域名
- 在B服务器开设一个FTP账号,目录指向到B站点
- 修改
config.php
配置文件,设置FTP信息 - 在ImgURL后台 - 系统设置 - 存储方案 - FTP,填写B域名的信息,并启用即可
修改配置文件
打开站点根目录下的config.php文件,找到FTP设置,填写FTP地址、账号、密码等信息。
- $config['ftp']['hostname']:FTP连接地址(可以是IP或域名)
- $config['ftp']['username']:FTP用户名
- $config['ftp']['password']:FTP密码
启用FTP存储
在ImgURL后台 - 系统设置 - 存储方案 - FTP,填写FTP绑定域名,并启用。
宝塔面板无法上传的问题
修改宝塔配置pure-ftp配置文件 /www/server/pure-ftpd/etc/pure-ftpd.conf
将
TLS 1
改成
TLS 0
然后重启下FTP: /etc/init.d/pure-ftpd restart
注意事项
- FTP存储绑定域名末尾没有斜杠(/)
- 不支持docker搭建的FTP
七牛云
自ImgURL Pro v1.1之后开始支持七牛云存储
新建存储空间
在七牛云后台 - 对象存储 - 新建存储空间,如下截图。
- 存储空间名称:随便填写(只要符合要求就行)
- 存储区域:国内服务器建议选择、华东、华北、华南
- 访问控制:公开空间
获取密钥
后台 - 个人中心 - 密钥管理,或者登录后直接访问:https://portal.qiniu.com/user/key 获取AccessKey/SecretKey,如下图。
修改配置文件
打开 config.php
找到七牛云设置,填写对应信息。
- $config['qiniu']['AccessKey']:对应七牛AccessKey
- $config['qiniu']['SecretKey']:对应七牛SecretKey
- $config['qiniu']['bucket']:对应七牛存储空间名称
- $config['qiniu']['up_host']:根据你空间存储区域参考:https://developer.qiniu.com/kodo/manual/1671/region-endpoint 获取,比如你创建空间选择的华南,那么此项对应地址为:http://up-z2.qiniup.com
启用七牛云存储
打开ImgURL后台 - 系统设置 - 存储方案 - 七牛云 - 设置七牛云空间绑定域名并进行启用即可。
注意事项
- 绑定域名末尾需要带上斜杠(/)
- 在新建bucket的时候,地区请选择和您图床服务器较近的区域。比如您图床安装在广州的服务器上,那么创建存储区域的时候区域建议选择华南。
- 假如您图床安装在国外的服务器,但是新建一个国内区域的bucket,将导致上传成功率和速度下降。
AWS S3
2.0.0
版本开始支持AWS S3存储,只要是支持S3协议的都可以,并非一定要用AWS S3,您也可以自建minio
等。
修改config.php
在config.php
中找到S3的配置,内容如下:
$config['s3']['region'] = 'us-east-1';
$config['s3']['endpoint'] = 'http://minio.xxx.com:9000';
$config['s3']['key'] = 'xxx';
$config['s3']['secret'] = 'xxx';
$config['s3']['bucket'] = 'xxx';
- region:如果有就填写对应的区域代码,如果没有,则不填写
- endpoint:就是S3的接口地址,如果是自建的minio,一般是
http://xxx.com:9000
- key:如果是自建minio就是用户名
- bucket:存储桶的名称
设置域名
在后台设置 - 系统设置 - 存储方案 - S3设置S3绑定的访问域名,注意,末尾需要带有/
注意S3的开关只对游客有效,如果是注册用户,并且设置了“注册用户默认存储策略”为S3,是否启用对注册用户都有效。
兼容存储
大部分对象存储都对AWS S3协议做了兼容,以下是部分存储的设置方法。
七牛云
七牛云后台 - 空间管理 - 新建空间 - 存储空间名称,名称根据规则填写即可,这个名称对应config.php
里面的:$config['s3']['bucket']
,存储区域选择离你图床最近的服务器,访问控制选择公开。
访问https://developer.qiniu.com/kodo/4088/s3-access-domainname获取“区域简称”和“访问 Endpoint”,对应关系如下:
-
$config['s3']['region']
对应七牛的区域简称
,比如:cn-south-1
-
$config['s3']['endpoint']
对应七牛的访问 Endpoint
,注意前面需要添加https
,末尾不需要/
,比如:https://s3-cn-south-1.qiniucs.com
访问https://portal.qiniu.com/user/key获取七牛的AccessKey/SecretKey
对应关系如下:
-
$config['s3']['key']
对应七牛的AccessKey
-
$config['s3']['bucket']
对应七牛的存储空间名称
在ImgURL后台 - 系统设置 - 存储方案 - S3绑定域名填写七牛的空间绑定域名,注意末尾需要带有/
,如下截图。
阿里云
登录阿里云OSS后台:https://oss.console.aliyun.com/bucket - 创建 Bucket,按照如下截图填写。
打开站点根目录下的config.php
,找到S3的配置选项:
$config['s3']['region'] = 'us-east-1';
$config['s3']['endpoint'] = 'http://minio.xxx.com:9000';
$config['s3']['key'] = 'xxx';
$config['s3']['secret'] = 'xxx';
$config['s3']['bucket'] = 'xxx';
继续打开阿里云文档:公共云下OSS Region和Endpoint对照表,对应关系如下:
-
region
对应阿里云Region ID -
endpoint
:http://buket.外网Endpoint
,比如http://bucket.oss-cn-hangzhou.aliyuncs.com
-
bucket
:对应阿里云存储桶名称
继续打开阿里云:访问凭证管理 获取AccessKey ID 和 AccessKey Secret
-
key
对应阿里云AccessKey ID -
secret
对应阿里云AccessKey Secret
完整的配置如下:
$config['s3']['region'] = 'oss-ap-southeast-1';
$config['s3']['endpoint'] = 'http://bucket.oss-ap-southeast-1.aliyuncs.com';
$config['s3']['key'] = 'xxx';
$config['s3']['secret'] = 'xxx';
$config['s3']['bucket'] = 'bucket';
Backblaze B2
Backblaze是一家国外的备份、存储提供商,B2存储有免费10G的额度,价格非常低廉,如果存储1TB数据,仅需5$/月,如果有需要的可以前往:https://www.backblaze.com/ 进行注册。
登录B2后台 - 创建一个桶。
- 桶独特的名字:就是存储桶的名称
- 桶里面的档案是:公众
- 其它选项保持默认
找到刚刚创建的桶 - 点桶设定。
桶信息设置为{"cache-control":"max-age=604800"}
这一行的意思是让浏览器缓存7天,不然每次都回源,浪费流量。
继续点生命周期的设置 - 选择“只保留了最后版本的文件”
B2后台点击左侧 - 账户 - 我的应用程序键 - 添加新的应用程序密钥。
按照下图填写。
创建成功后程序密钥只会出现一次,之一复制并保存下来,稍后使用。
接下来修改config.php
填写S3配置信息,B2的配置参考如下:
/*------------------------------------- S3设置 -------------------------------------*/
$config['s3']['region'] = 'us-west-002';
$config['s3']['endpoint'] = 'https://s3.us-west-002.backblazeb2.com';
$config['s3']['key'] = 'xxx';
$config['s3']['secret'] = 'xxx';
$config['s3']['bucket'] = 'xxx';
/*------------------------------------- S3设置END -------------------------------------*/
-
key
:对应B2的keyID
-
secret
:对应B2的applicationKey
-
bucket
:对应B2的存储桶名称
region/endpoint
通过浏览B2的档案,获取到一个S3 URL地址,格式如:https://bucket.s3.us-west-002.backblazeb2.com/imgs/2022/03/28/00f925c6550c3154.jpg
那么region则为us-west-002
,endpoint则为https://s3.us-west-002.backblazeb2.com