一例OSS问题排查
某品牌OSS存储,使用IP+PORT可以正常访问。使用NG代理后,不论是IP还是域名访问都不支持SDK访问,但是使用S3客户端可以正常访问。
通过抓包对比发现,S3客户端如下
SDK访问抓包如下
判断是由于两种访问方式加密方法不一样导致。S3默认采用版本较低的V2版本加密方法而不是V4,V4除了校验 HTTP请求中HEADER中的host字段外,还会要求HTTP请求中REQUEST.URI。
最终的解决方法要么使应用使用V2版本加密方式。
要么使存储支持域名形式访问。这样可以做到经过NG代理后,request中的uri不变,同时需要配合 proxy_set_header 设置请求的header,在ingress中,要使用注解 upstream_vhost.如果使非标准80、443端口,proxy_set_header字段还要加上端口号。
https://www.cnblogs.com/hiyang/p/12631922.html
https://www.dovefi.com/post/s3对象存储aws4签名分析与实现/