amazon-s3 - 通过 Haproxy 反向代理 S3 存储桶
问题描述
我正在尝试使用 Haproxy(特别是 Haproxy Ingress)为我的 S3 存储桶(我正在使用 DigitalOcean Spaces)设置反向代理。
经过一些试验和错误,我得到了代理的某个地方,但它还不能正常工作。
GET 请求工作正常,但是,PUT 请求(如 putObject)不起作用,因为我收到错误“403 - SignatureDoesNotMatch”。不幸的是,我似乎无法找到原因,并且我已经进行了广泛的搜索。
我现在的后端如下:
backend s3-reverse-proxy_443
mode http
balance roundrobin
acl https-request ssl_fc
http-request redirect scheme https if !https-request
http-request set-header Host <bucket>.ams3.digitaloceanspaces.com
http-request set-header X-Original-Forwarded-For %[hdr(x-forwarded-for)] if { hdr(x-forwarded-for) -m found }
http-request del-header x-forwarded-for
option forwardfor
http-response set-header Strict-Transport-Security "max-age=15768000"
server srv001 5.101.110.225:443 weight 1 proto h2 alpn h2 ssl no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets verify none check inter 2s
尝试仅使用“.ams3.digitaloceanspaces.com”来推翻服务器,但这没有用。
我认为这与标题有关,但我尝试添加“授权”和“连接”标题,但它们似乎都不起作用。
我也在使用后端协议“h2-ssl”,因为没有它,它就不能代理。
提前致谢!
取得了一些进展,签名版 v4 不起作用,但 v2 可以。
但是,如果我是正确的,docker 注册表使用 v4,我希望它与最新标准兼容。
我对 S3 了解不多,我目前正在阅读有关身份验证差异的文档,但欢迎提供任何帮助!
所以,经过一番调查,签名版本 v4 使用请求 URI 来计算签名。当存储桶本身计算相同的签名时,请求 URI 是不同的,因为它侦听另一个 URI。
我见过一些人在 nginx 处理请求时使用 nginx 重新计算签名,但还没有找到在 Haproxy 中执行此操作的方法。
现在最好的方法是使用签名版本 v2,但是,对于大多数 S3 存储桶提供商来说,它可能已被弃用。
解决方案
推荐阅读
- javascript - 如何使用Vue从父级中的多个子组件中获取值?
- deno - Deno - 更新天龙版本
- php - Autobahn-js 无法连接到 Ratchet 服务器 (Wamp)
- flutter - 使用颤振处理 Appcheck 时出错
- python - 在函数参数类型中使用普通 {} 和 typing.Dict 有什么区别?
- reactjs - 使用空数组获取数据加载页面
- javascript - 使用 Ajax 将检查的无线电输入发送到 PHP
- python - 如何告诉 Python 查看模块的不同目录
- c# - ps.Invoke() 不返回与 PowerShell 相同的输出
- sql - 无法使用转换为变量赋值