AWS S3配置x-amz-website-redirect-location重定向不生效问题
问题描述
操作流程:
- 在AWS S3中创建存储桶,开启静态网站托管功能
- 上传两个HTML文件到存储桶:
page1.html文件内容:This is page1page2.html文件内容:This is page2
- 在S3管理控制台为
page1.html对象添加元数据:x-amz-website-redirect-location = /page2.html
故障现象:
通过Chrome浏览器访问S3静态网站地址时,访问page1未触发重定向,页面仍显示page1原有内容,没有跳转到page2。已对照官方操作指引检索排查相关方案,仍未定位问题。
附件:
curl -v访问对象地址的响应结果:
$ curl -v https://aws-redirect-test.s3.ap-northeast-1.amazonaws.com/page1.html * Trying 3.5.154.185... * TCP_NODELAY set * Connected to aws-redirect-test.s3.ap-northeast-1.amazonaws.com (3.5.154.185) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/cert.pem CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server did not agree to a protocol * Server certificate: * subject: CN=*.s3-ap-northeast-1.amazonaws.com * start date: Dec 9 00:00:00 2021 GMT * expire date: Dec 2 23:59:59 2022 GMT * subjectAltName: host "aws-redirect-test.s3.ap-northeast-1.amazonaws.com" matched cert's "*.s3.ap-northeast-1.amazonaws.com" * issuer: C=US; O=Amazon; OU=Server CA 1B; CN=Amazon * SSL certificate verify ok. > GET /page1.html HTTP/1.1 > Host: aws-redirect-test.s3.ap-northeast-1.amazonaws.com > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < x-amz-id-2: jWBm/e0Rdb2BB3R/nFffH8/YS2+f1AgXFHQfT6bUzmMK9tMZDtSNYprUp4Ka6m9xMKookshlWwo= < x-amz-request-id: T4JG7K11X2FTBCA8 < Date: Thu, 09 Jun 2022 02:15:03 GMT < Last-Modified: Thu, 09 Jun 2022 02:12:42 GMT < ETag: "a12ac1ca5226842e56871deaa4d9ef9c" < x-amz-website-redirect-location: /page2.html < Accept-Ranges: bytes < Content-Type: text/html < Server: AmazonS3 < Content-Length: 14 < This is page1 * Connection #0 to host aws-redirect-test.s3.ap-northeast-1.amazonaws.com left intact * Closing connection 0
问题根因
访问端点用错了,当前使用的是S3 REST API对象端点,不是静态网站托管专属端点,重定向逻辑不会触发。
从curl结果可以直接看到,请求的地址是https://aws-redirect-test.s3.ap-northeast-1.amazonaws.com/page1.html,这个是S3原生的对象访问接口,只会原样返回对象内容和配置的自定义元数据,不会处理x-amz-website-redirect-location对应的重定向规则——这个重定向逻辑只有访问S3静态网站专属端点时才会生效。
S3静态网站端点的域名格式和REST端点有明显区别,以ap-northeast-1区域为例,格式为http://<桶名>.s3-website-ap-northeast-1.amazonaws.com,域名标识段是s3-website,而非REST端点的s3。
修复操作
- 打开S3控制台,进入对应存储桶的「属性」页面,拉到最底部的「静态网站托管」板块,复制面板中官方给出的静态网站端点地址,不要使用对象详情页提供的原生对象访问URL。
- 用复制的静态网站端点拼接
/page1.html路径访问,此时S3会识别对象上的重定向元数据,返回301 Moved Permanently状态码,携带Location: /page2.html响应头,自动完成跳转。 - 静态网站端点默认仅支持HTTP协议,如果需要HTTPS访问,需要在端点前挂载CloudFront分配,配置SSL证书后转发请求到静态网站源站,直接访问静态网站端点的HTTPS地址无法连通。
内容的提问来源于stack exchange,提问作者skrbug
相关产品推荐
相关产品推荐

