Cloudfront使用ssl将www重定向到裸域

Mar*_*ock 68 ssl redirect amazon-s3 amazon-cloudfront amazon-route53

请原谅我,如果之前有人询问过,有很多资源可以触及,但似乎没有什么适合我的特定(https)用例.

我正在尝试将https://www.example.com重定向到https://example.com.同样,这应该适用于http://www.example.comhttps://example.com.

我已经设置了一个带有s3存储桶源的云端分发,将http重定向到https,添加了cname example.com并添加了我的域证书(适用于www子域以及裸域).

我还设置了一个单独的发行版,其中包含www.example.com的cname,添加了证书并将原点设置为一个单独的s3存储桶,在(静态网站托管)中将所有请求重定向到https://example.com.

重定向按预期方式运行http://example.comhttps://example.com,但http:s://www.example.com到https://example.com则没有.

在路由53中,我将根域别名为第一个云端分布,而www别名为第二个.

RKI*_*RKI 81

在AWS上托管网站,以便:

https://www.example.com,http://www.example.com和http://example.com 全部重定向到 https://example.com

你需要:

  1. 创建两个名为:example.comwww.example.com的 S3存储桶.

  2. 打开这两个桶上的静态网站托管.

  3. 将存储桶www.example.com中的重定向配置为:https://example.com.在存储桶属性中,选择静态网站托管 => 将所有请求重定向到另一个主机名.在Target bucket或domain字段中,输入example.com,在Protocol字段中输入https

  4. 对于这些存储桶,请创建两个 CloudFront分配.每个发行版都指向相应的存储桶:

  5. 对于Origin Domain Name,提供静态网站托管部分中提供的存储桶网址.网址应该有形式(或类似):example.com.s3-website-us-west-1.amazonaws.com

    • 在两个分发集上HTTP到HTTPS重定向.

    • 请勿使用由AMAZON AUTOCOMPLETE建议的URL!

    • 不要设置默认的根对象属性!

  6. 通过将www.example.com和example.com的A记录设置为指向相应的CloudFront分配来配置DNS.

它为什么有效?在两种情况下(使用和不使用www),CloudFront都提供从HTTP到HTTPS的重定向.www.example.com的存储桶提供重定向到example.com.如果您没有此分发,则存储桶将无法重定向https://www.example.com的请求.S3本身不支持静态网站托管的HTTPS.

  • 不要在www->裸CF分发上将HTTP设置为HTTPS重定向,以避免不必要的重定向.您希望http://www.example.com首先直接访问https://example.com而不是https://www.example.com. (13认同)
  • 同样值得注意的是,仅使用www.example.com上的CNAME指向example.com就不会重定向.相反,www.example.com将显示与example.com不同的内容. (7认同)
  • 为什么没有人解释说您需要为每次重定向安装 SSL 证书,以防止浏览器发出“不安全”警告?这是基本的,但像我这样的“只是开发人员”的人并不知道这一点。我花了几天时间试图解决这个问题,直到我发现这个建议...... (3认同)

Mar*_*ock 50

由于这个答案,我找到了解决方案:Amazon S3 Redirect和Cloudfront

简而言之:

如果源只是存储区ID,则Cloudfront不会遵循S3中的重定向规则设置.相反,我必须将原点设置为提供的s3静态网站主机名.

  • 非常感谢您发布答案.我用它将HTTPS重定向从裸域转到www,例如[https://example.com](https://example.com) - > [https://www.example.com](https:// www.example.com).此解决方案违反直觉,因为AWS UI自动完成标准S3主机名(bucketname.s3.amazonaws.com),您认为这是正确的方法,但对于此用例,静态网站托管端点(例如bucketname.s3-website-us-east-1.amazonaws.com)就是您所需要的. (7认同)
  • 同样重要的是,您的CloudFront发行版******没有任何设置为**默认根对象**,因为它将破坏S3存储桶中的重定向. (7认同)