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

经VPC搭建SSH隧道访问私有AWS S3网站出现301重定向错误咨询

问题根因

返回301重定向的核心原因是S3静态网站端点依赖HTTP请求的Host头识别目标存储桶。你当前使用的SSH本地端口转发是四层转发,不会修改请求携带的Host字段:本地访问localhost:3000时,请求头里的Host值为localhost:3000,S3端点收到请求后匹配不到对应Host的存储桶,就会返回WebsiteRedirect编码的301响应,最终跳转到S3官方首页。
你在VPC内EC2上直接执行curl能正常拉取内容,是因为curl默认会把访问目标域名{bucketname}.s3-website-{region}.amazonaws.com填入Host头,S3可以正常识别桶信息。

临时调试修复方案

如果只是短期测试,不需要调整现有架构,可直接用以下两种方法解决:

  • 手动指定Host头
    命令行测试时直接给curl加Host头参数即可:
    curl -H "Host: {bucketname}.s3-website-{region}.amazonaws.com" http://localhost:3000
    
    要用浏览器访问的话,安装请求头修改类插件,给localhost:3000域下的所有请求添加固定Host头,值为你的S3静态网站域名即可正常加载。
  • 改用SSH动态代理
    四层本地端口转发改不了应用层内容,换成SOCKS5动态隧道配合Hosts映射可以完全模拟VPC内的访问环境:
    1. 建立动态SOCKS代理,不指定固定转发目标:
      ssh -N -D 1080 -i {keypair}.pem ec2-user@{ec2-instance-in-vpc}
      
    2. 修改本地hosts文件,添加一条记录把{bucketname}.s3-website-{region}.amazonaws.com指向127.0.0.1
    3. 给浏览器配置SOCKS5代理,地址为127.0.0.1:1080,开启「代理解析DNS」选项
    4. 直接在浏览器访问http://{bucketname}.s3-website-{region}.amazonaws.com即可,请求全程走VPC内EC2代理,Host头、请求路径都和EC2本地访问完全一致,不会触发重定向。
长期访问/标准化测试方案

SSH隧道仅适合临时调试,生产级连通或者常态化测试建议用以下方案,稳定性更高:

  • VPC内部署反向代理
    在S3网关端点关联的子网内部署轻量Nginx实例,配置反向代理规则,主动改写请求Host头为S3网站域名:
    server {
        listen 80;
        location / {
            proxy_pass http://{bucketname}.s3-website-{region}.amazonaws.com;
            proxy_set_header Host {bucketname}.s3-website-{region}.amazonaws.com;
        }
    }
    
    后续不管是做SSH端口转发到Nginx端口、给Nginx挂载内网负载均衡,还是对接VPN接入,都可以直接访问,不需要额外修改本地请求配置。
  • 替换S3静态网站托管模式
    S3公网网站端点天生依赖Host头做桶路由,私有化场景下建议改用S3接口端点,前置挂载ALB或者API网关,统一做路径和Host头改写,对内网/授权访问用户提供服务,避免公网端点的路由逻辑限制。
  • 轻量验证直接在EC2内操作
    如果只是验证页面可访问性、对象权限配置是否正确,直接在EC2上安装w3m、lynx这类命令行浏览器访问S3端点即可,不需要搭建本地隧道,验证效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:09:18