WordPress阿里云OSS对象云储存配置教程

许多站长选择将图片、附件等单独存放在第三方对象云储存上,这种方案可以节省服务器存储磁盘空间,同时如果网站需要搬家的时候也可减少文件迁移的工作量,并且独立云储存在访问文件的时候也避开了服务器带宽的限制,所以是可以降低建站/运维成本,提高访问体验的。常见的对象云储存,我们最熟悉的应该就是阿里云的OSS了,以下是在WordPress主题中的配置使用方法。

准备工具:OSS Upload 插件、阿里云OSS对象存储申请

一、创建 Bucket

进入阿里云控制台,可通过菜单的产品与服务>存储与CDN>对象存储 OSS进入OSS控制台,然后点击创建 Bucket按钮创建存储空间,如图:

其中主要需要注意的有2点:

1、区域建议考虑您的服务器所在地就近选择,如果使用的是阿里云的服务器,建议选择和服务器同区域,这样可以通过内网互通节约上传流量成本,同时上传速度也快很多的。

2、读写权限选择公共读,这样可以实现图片正常访问。

二、WordPress后台OSS配置

1、插件

OSS非WordPress默认支持功能,所以目前需要通过插件来实现,大部分主题推荐使用OSS Upload插件,我们通过对多款OSS插件做过兼容测试和代码分析,OSS Upload是我们所知的唯一一个功能完善、hook挂载合理的WordPress OSS插件。

插件下载:OSS uploads 插件 对代码进行了加密,用不了,请从这里下载旧版插件:oss uploads ,然后开启阿里云OSS里面的回源,回源地址填写你的网址

新版插件下载:后台搜索下载或前往作者页面:https://www.xiaomac.com/2016121895.html

2、配置

安装启用OSS Upload插件后,进入设置>OSS Upload,按照提示设置插件选项。

下面是需要注意的选项:

Access Key和Secret Key

Access KeySecret Key可以登录阿里云后台获取:点击阿里云界面右上角头像,选择accesskeys,然后创建好AccessKey,如图:

访问链接

访问链接填写外网Bucket 域名地址(需要加上http://或者https://),如果绑定了自己的域名则可以填写自己的域名地址。如果上传路径设置了保存的目录,则访问链接也需要在后面加上相同的目录。

上传端点

上传端点的话,在上面新建Bucket的时候提过,如果是阿里云服务器并且选择的是同区域,则可以填写内网节点的地址,如果不是则填写外网访问地址。

填写到这里的话,可以点击页面上面的测试一下按钮,如果提示正常的话,则表示对接成功。

缩略图

建议选择使用参数图片服务,默认且简单或者使用物理缩略图,当主题出现缩略图错误时勾选选项。

远程图片

主题也有同类功能(主题设置>优化加速>保存远程图片),如果主题启用了的话,这里不需要重复开启的。

本地备份

建议勾选,尤其是前期配置和文件同步过程中,可避免图片丢失无法恢复的问题。

其他特色图片样式分隔符全图样式自动压缩延时加载延时链接等选项可忽略不填写。

设置完成后点击保存更改按钮,然后可以再点击上传整个本地存储目录来同步文件到OSS,这个过程可能需要些时间,同步完成后访问网站前台页面可以测试图片是否可以正常访问,如果可以的话那就表示配置成功了。

三、通过Referer设置防盗链(内容参考网络)

  • 第一步:进入 OSS 管理控制台界面。
  • 第二步:单击目标存储空间的名称进入存储空间管理页面。
  • 第三步:单击 Bucket 属性 > 防盗链设置。
  • 第四步:单击“设置”添加白名单网址并设置是否允许其为空。
  • 第五步:单击“提交”保存对防盗链的设置。

eg

对于一个名为test-1-001的存储空间,设置其referer 白名单为 http://www.aliyun.com。则只有 referer 为http://www.aliyun.com的请求才能访问oss-example这个存储空间中的对象。

签名URL实现步骤

签名URL的原理和实现方法见OSS开发人员指南授权第三方下载。 签名URL的实现步骤:

  • 1、将Bucket的权限设置为私有读;
  • 2、 根据期望的超时时间(签名URL失效的时间)生成签名。

具体实现

  • 第一步:安装PHP最新代码,参考PHP SDK文档;
  • 第二步:实现生成签名URL并将其放在网页中,作为外链使用的简单示例:
  • 第三步:通过浏览器访问 多请求几次会发现签名的URL会变,这是正常的。主要是因为过期时间的改变导致的。这个过期时间是链接失效的时间,是以unix time的形式展示的。 例如:Expires=1448991693,可以将这个时间转换成本地时间。在Linux下的命令为date -d@1448991693,也可以在网络上找工具自行转换。

特别说明

签名URL可以和Referer白名单功能一起使用。

如果签名URL失效的时间限制在分钟内,盗链用户即使伪造了Referer也必须拿到签名的URL,且必须在有效的时间内才能盗链成功。 相比只使用Referer来说,增加了盗链的难度。 也就是说签名URL配合Referer白名单功能,可以增加防盗链的效果。

<?phprequire 'vendor/autoload.php';#最新PHP提供的自动加载
use OSS\OssClient;#表示命名空间的使用
$accessKeyId="a5etodit71tlznjt3pdx7lch";#AccessKeyId,需要使用用户自己的
$accessKeySecret="secret_key";#AccessKeySecret,需要用用户自己的
$endpoint="oss-cn-hangzhou.aliyuncs.com";#Endpoint,根据Bucket创建的区域来选择,本文中是杭州
$bucket = 'referer-test';#Bucket,需要用用户自己的
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);$object = "aliyun-logo.png";#需要签名的Object
$timeout = 300;#期望链接失效的时间,这里表示从代码运行到这一行开始的当前时间往后300秒
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout); #签名URL实现的函数$img= $signedUrl;#将签名URL动态放到图片资源中并打印出来
$my_html = "<html>";$my_html .= "<img src=\"".$img. "\" />";$my_html .= "<p>".$img."</p>";$my_html .= "</html>";echo $my_html;?>

防盗链总结

基于OSS的防盗链最佳实践点如下:

使用三级域名URL,例如referer-test.oss-cn-hangzhou.aliyuncs.com/aliyun-logo.png,安全性比绑定二级域名更高。三级域名方式能够提供Bucket级别的清洗和隔离,能够应对被盗链后的流量暴涨的情况,也能避免不同Bucket间的互相影响,最终提高业务可用性;
如果使用自定义域名作为连接,CNAME也请绑定到三级域名,规则是bucket + endpoint。假如你的bucket名为test,三级域名则为test.oss-cn-hangzhou.aliyuncs.com;
对Bucket设定尽可能严格的权限类别。例如提供公网服务的Bucket设置为public-read或private,禁止设置为public-read-write。Bucket权限参见访问控制;
对访问来源进行验证,根据需要设置合适的Referer白名单;
如果需要更严格的防盗链方案,请参考签名的URL方案;
记录Bucket访问日志,能够及时发现盗链活动和验证防盗链方案的有效性。 访问日志参见设置访问日志记录。

常见问题及解决方案

问:在OSS控制台设置了防盗链,一直不生效,但页面可以防但是播放器不可以,请问为什么?怎么解决?

答:目前设置防盗链不生效的主要问题集中于视频和音频文件, 在使用诸如windows media player,flash player等播放器后,在请求OSS资源的时候传递的Refer为空,这就造成防盗链的失效, 不仅仅把别人防住了,也把自己给防住了。针对这种情况,可以参考上面提到的签名URL防盗链的方法。

问:Referer是什么?怎样才会带上?如果遇到HTTPS怎么办 不需要添加别的了吗,比如逗号之类的?

答:Referer是HTTP协议中的请求头,在跨页面访问的时候会带上。需要看看浏览器请求的Referer是http://还是https://,一般是http://。

问:如何生成签名URL?AccessKeySecret放在客户端里的安全性?

答:签名URL的方法参见各个SDK文档。AccessKeySecret这种不建议直接放在客户端,RAM提供了STS服务可以解决这个问题。也可以参考RAM和STS指南

问:例如要写a.baidu.com和b.baidu.com,这两个用通配符(*,?) 如何写?

答:可以写成http://*.baidu.com,对于这种单字符的也可以写成http://?.baidu.com

问:*.domain.com 可以匹配二级域名,但无法匹配 domain.com 另外添加一行 domain.com 也没效果,如何配置?

答:注意一般的referer中会带http这样的参数,可以通过chrome的开发者模式观察下请求的Referer是什么,然后再具体设置。这里可能是忘了写http://,应该为http://domain.com

问:如果防盗链没有生效怎么办?

推荐使用chrome来查看。打开开发者模式,点击网页,查看HTTP请求中的Referer具体值是什么,对应在OSS中设置的Referer,是否能匹配上。如果还是解决不了,提工单。

 

给TA买糖
共{{data.count}}人
人已赞赏
网络应用

乐心健康在线刷步数提交源码

2020-9-18 23:36:38

wordpress教程站内网站建设

代码实现柒比贰B2主题外部链接隐藏并链跳转功能

2020-2-1 2:09:19

⚠️
Golurending上的部份代码及教程来源于互联网,仅供网友学习交流,未经Golurending作者或上传书面授权,请勿作他用。
若您的权利被侵害,请联系站长 邮箱codesns#163.com(#-@) 或 点击右侧 私信:管理员 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索