2

我正在尝试使用 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 存储桶提供商来说,它可能已被弃用。

4

0 回答 0