本文主要介绍怎样利用Nginx lua 实现将阿里云OSS存储空间做到同本地磁盘一样使用核心是利用Nginx lua 对OSS请求进行签名并利用内部跳转将全部訪問本地Nginx的请求加上OSS 签名转发给OSS,实现本地Nginx无缝衔接阿里云OSS存储空间无限扩展,存储成本无限下降数据安全%
//可以判断当前expire是否超过了当前时間,如果超过了当前时间,就重新取一下.3s 做为缓冲
服务端签名直传并设置上传回调
當采用方案后问题来了,用户上传数据后很多场景下,应用服务器都要知道用户上传了哪些文件文件名字,甚至如果是图片的话圖片的大小等。为此OSS开发了上传回调功能
简单讲就是用户要上载一个文件到OSS服务器,而且希望上载完毕的时候自己的应用服务能够知道這件事这时就需要设置一个回调函数,把这件事告知用户的应用服务器这样当OSS收到用户的上传请求之后,开始上传传完之后不会直接给用户返回结果,而是先通知用户的应用服务器:“我上传完毕了”然后应用服务器告诉OSS:“我知道啦,你帮我转达给我的主人吧”于是OSS就把结果转达给用户了。
用户电脑浏览器测试样例:
用手机测试该上传是否有效可以用手机(微信、QQ、手机浏览器等)扫一扫二维碼试试(这个不是广告,只是上述网址的二维码为了让大家看一下这个实现能在手机端完美运行)。
例子是采用后端签名语言是用PHP。
只要以下三步,就能实现文件快速通过网页上传到OSS并苴OSS会回调通知到用户设置的应用服务器。
为了浏览安全必须为bucket设置Cors, 参照下文。
设置自己的回调URL如//",
上面提到ajax有多少种callbackkbody,就是上述返回结果里面的ajax有多少种callbackk内容经过base64编码后生成的。
# 向回调服务器发送消息体为文件 `:23450 -v
#向回调服务器发送消息体为文件 `:23450
调试回调服务器时可以先忽略签名验证部分,因为
cURL
模拟签名功能比较困难;签名验证功能OSS示例中已经提供建议直接使用;
回调服务器建议有日志功能,记录收到嘚所有消息方便调试、跟踪;
回调服务器正确处理回调请求后,一定要返回 200而不是其它的
20x;
bf三个字节的BOM头)等
原因:回调服务器处理时間超过 5秒,OSS认为超时建议回调服务器的处理逻辑修改为异步,保证在5秒内处理完毕并返回结果OSS
原因:回调服务器处理时间超过5秒,OSS认為超时
原因:回调服务器返回给OSS的消息的状态码是400
,请检查回调服务器的处理逻辑
原因:回调服务器未启动,或者上传回调参数中的ajax囿多少种callbackkUrl
或者OSS与回调服务器的网络不通。推荐在ECS上部署回调服务器与OSS同属内网可以节省流量费用,同时保证网络质量