华为对象存储:nginx代理临时访问地址后访问报错:Authentication Failed
目录
- 场景
- nginx配置
- 异常表现
- 排查
- 原因
- 解决
场景
1、使用华为对象存储保存资源文件
2、使用华为对象存储原本的临时访问url可以正常访问资源
3、经过nginx代理后,访问资源会报错Authentication Failed
nginx配置
location ~* /voice/* {proxy_pass https://xxx-test.obs.cn-south-1.myhuaweicloud.com;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-Proto $scheme;break;
}
异常表现
使用nginx代理的地址访问会报错

排查
从报错信息上看是身份认证存在问题
访问地址上存在认证信息的也就只有预签名参数了
华为对象存储生成临时访问地址时,会生成预签名参数,该签名除了时间参数之外,还和Host有关,也就是获取临时地址用于计算的签名使用的Host和验证签名使用的Host必须要一致
原因
nginx代理时,Host传递的ip和端口与生成预签名时所用的ip和端口不一致
解决
nginx配置Host参数,配置为minio临时访问地址的ip和端口
location ~* /voice/* {proxy_pass https://xxx-test.obs.cn-south-1.myhuaweicloud.com;# Host参数设置为华为对象存储临时访问地址的域名和端口proxy_set_header Host xxx-test.obs.cn-south-1.myhuaweicloud.com:443;proxy_set_header X-Real-IP $remote_addr;# 代理的是https地址,这里使用X-Forwarded-Proto $schemeproxy_set_header X-Forwarded-Proto $scheme;break;
}
重启nginx后可以正常访问资源

