0. 前言
公司开了个阿里云的OSS用于上传下载图片视频素材,为了省米要求走内网(内网免流量费)。但我们开发不可能在服务器上开发(用VSCode连服务器直接卡爆),于是就想到用nginx进行反代。(不是CNAME,cname依然走的公网)
于是噩梦开始了,无论怎么调试怎么修改,死活出现以下错误

我甚至找到发送请求的函数与公网接口请求对比有啥不同

除了Signature和时间不同之外,其他参数都是一致的。
浪费了一个下午的时间,查阅了大量文章,要么是用公开权限请求的,要么就是无关的minio。既然都没有人讲过,那我在这简单说一下吧。
相关文章:
基于nginx反向代理实现OSS固定域名IP访问-阿里云开发者社区
如何基于ECS实例实现OSS反向代理_对象存储(OSS)-阿里云帮助中心
1. 问题解决
直接说结果,问题出在nginx上。来看看正确的配置:

非常的简单,就是Host
的问题,需要与代理的内网节点域名一致。
因为校验签名会取出Host
中Bucket部分,如果你Host设置的值为$host
,那肯定死活取不到正确的Bucket Name。
像我这里用的域名是oss.xxx.com
,那服务器后端取的Bucket Name就是oss
,一跟签名校验就直接给你丢 SignatureDoesNotMatch
。
不知道内网地址的可以看看OSS概览底下,另外走内网的前提是ECS主机和OSS是同地域的。
发表回复