You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Gateway反向代理S3遇SignatureDoesNotMatch问题求助

解决Spring Cloud Gateway反向代理S3的SignatureDoesNotMatch问题

问题核心

AWS S3的请求签名与Host头强绑定:如果客户端是基于S3 endpoint的Host生成签名,但请求发送到网关时携带的是网关自身的Host,此时若网关保留原Host头,S3收到后会用网关Host验证签名,必然出现不匹配。Nginx默认会自动将Host替换为上游S3的Host,这也是Nginx能正常工作的关键。

修正后的配置方案

移除PreserveHostHeader过滤器,让Spring Cloud Gateway自动将Host头替换为S3 endpoint的Host;若自动替换不生效,可手动指定S3的Host头:

- id: example-s3
  predicates:
  - Path=/example-s3/**
  uri: ${project.services.internal.example-s3.url}      
  filters:
  - RewritePath=/example-s3/(?<segment>.*), /$\{segment}
  # 自动替换不生效时,手动指定S3的endpoint Host(替换为你的实际地址)
  # - SetRequestHeader=Host, bucket-name.s3.us-east-1.amazonaws.com

额外验证要点

  1. 签名相关头完整转发:确认x-amz-content-sha256、x-amz-date、x-amz-user-agent这些签名依赖的请求头未被网关移除或修改。
  2. 禁止修改请求体:网关不能对请求体做任何修改(如解压、拼接内容),否则x-amz-content-sha256的哈希值会与S3验证时的不一致。
  3. Authorization头一致性:确保Authorization头被完整转发,其中SignedHeaders包含的host必须与转发后S3收到的Host完全一致。

内容的提问来源于stack exchange,提问作者SantiSori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 14:22:42