使用自定义域名访问 AWS S3

在使用AWS S3存储桶时,当您将存储桶配置为静态网站时,先将AWS Amazon S3 存储桶设置开放外部访问

然后在存储桶属性中,开启托管静态网站。

S3存储桶会默认分配访问桶资源对象的域名,域名格式:

Amazon S3 网站端点不支持 HTTPS 或接入点。如果要使用 HTTPS,则可以使用 Amazon CloudFront 为 Amazon S3 上托管的静态网站提供服务。有关更多信息,请参阅如何使用 CloudFront 为我的 Amazon S3 存储桶提供 HTTPS 请求? 要使用自定义域的 HTTPS,请参阅使用注册到 Route 53 的自定义域配置静态网站。

此时上传资源到s3桶中,则可通过域名+资源路径来访问桶对象资源。

如果不想使用默认域名访问,想用自定义的域名访问S3怎么办?

使用自定义域名访问 AWS S3 有两种实现方式,一种是直接将域名和 S3 关联,另一种是使用 CloudFront。

托管静态网站-网站端点-域名和S3关联

创建一个和域名名称相同的存储桶,比如有一个域名:example-bucket.com,则创建一个名称为example-bucket.com的桶。

创建成功后,直接去域名托管商,比如:cloudflare,在DNS记录中配置CNAME类型记录,将域名指向桶默认分配的域名地址即可,示例如下:

添加 DNS 别名记录

如果您拥有已注册的域,则可以添加指向 Amazon S3 网站端点的 DNS CNAME 条目。例如,如果您注册了 www.example-bucket.com 域,则可以创建存储桶 www.example-bucket.com,并添加指向 www.example-bucket.com.s3-website.Region.amazonaws.com 的 DNS CNAME 记录。对 http://www.example-bucket.com 的所有请求都将路由到 www.example-bucket.com.s3-website.Region.amazonaws.com

详情参见网站端点

在创建根域名访问后,如果想让子域名(www.example-bucket.com)也访问网站,可以创建一个子域名相同的桶,然后为子域存储桶(www.example.com)创建重定向请求。

为网站重定向配置子域存储桶

在为网站托管配置了根域存储桶后,可以将子域存储桶配置为将所有请求重定向到该域。在此示例中,对 www.example-bucket.com 的所有请求都重定向到 example-bucket.com。

配置重定向请求

  1. 在 Amazon S3 控制台上的 Buckets(存储桶)列表中,请选择您的子域存储桶名称(在本例中为 www.example-bucket.com)。
  2. 请选择属性。
  3. 在静态网站托管下,选择编辑。
  4. 请选择 Redirect requests for an object(重新导向对于对象的请求)。
  5. 在 Target bucket(目标存储桶)框中,输入您的根域(例如 example-bucket.com)。
  6. 对于 Protocol(协议),请选择 http。
  7. 选择保存更改。

使用CloudFront

在使用网站端点托管时,必须域名和桶名称相同,桶虽然可以重定向,但是如果是已有桶不方便进行迁移,

又或者就是不想泄露桶名称,这时就可以使用CloudFront来实现。

创建一个源为已创建的存储桶的CloudFront分配,创建成功后,会分配一个CloudFront.net子域名,

然后将您的DNS记录指向CloudFront即可。

创建 CloudFront 分配

使用 Amazon S3 源创建分配

  1. 通过 打开 CloudFront 控制台 https://console.aws.amazon.com/cloudfront/v4/home
  2. 选择 Create Distribution(创建分配)。
  3. 在 Create Distribution(创建分配)页面上的 Origin Settings(源设置)部分中,对于 Origin Domain Name(源域名),输入您的存储桶的 Amazon S3 网站端点,例如 example.com.s3-website.us-west-1.amazonaws.com。 CloudFront 将为您填写 Origin ID (源 ID)。
  4. 对于 Default Cache Behavior Settings (默认缓存行为设置),将值保留设置为默认值。
  5. 选择 Create Distribution。
  6. 要查看分配的状态,请在控制台中找到该分配,然后检查 Status 列。 InProgress (进行中) 状态表示分配尚未完成部署。 分配部署完毕后,您可以使用新的 CloudFront 域名来引用您的内容。
  7. 记录 CloudFront 控制台中显示的 Domain Name (域名) 值,例如 dj4p1rv6mvubz.cloudfront.net。
  8. 要验证您的 CloudFront 分配是否正常运行,请在 Web 浏览器中输入该分配的域名。
  9. 如果您的网站是可见的,则 CloudFront 分配正常工作。如果您的网站具有向 Amazon Route 53 注册的自定义域,您将需要 CloudFront 域名来在下一步更新记录集。

详情参见使用 Amazon CloudFront 为网站提速

参考