如何在Google云端存储上托管整个网站?

时间:2013-12-22 16:02:49

标签: dns google-cloud-storage cname

有没有办法在 Google云端存储上托管整个网站?也就是说,将存储桶直接映射到顶级域。

E.g。创建一个名为 mysite.com 的存储桶,然后当用户访问 mysite.com 直接从云存储中提供内容时?

我知道如何CNAME子域名,例如 静态 .mysite.com ,但无法弄清楚如何将顶级域映射到存储桶。

任何解决方案?

8 个答案:

答案 0 :(得分:19)

我也想这样做。但是,正如您所发现的那样,目前无法将Google云端存储分区直接绑定到顶级域名。

Google云端存储应答网络请求的IP地址经常发生变化(以适应互联网上不断变化的条件),因此Google不希望您添加其中的一部分(这会很快过时)作为您网站的DNS服务器的记录。相反,Google需要CNAME指向其控制的DNS名称,因此可以根据需要随时更改Google云端存储的IP地址。并且CNAME只能添加到子域而不是顶级域。 (这是因为当给定级别存在CNAME时,该域的DNS服务器将不会回答该级别的任何其他查询。但顶级域名也需要至少回答NS和SOA查询。)

现在唯一的解决方法是,如另一个答案中所述,为www子域设置CNAME,并配置DNS托管服务以执行从顶级域到www的http级重定向子域。 (Mosty提供商将支持这一点。)

如果你不是这个解决方案的粉丝(像我一样),那么有三种可能性。第一个是等待Google提供在Google云端存储上托管顶级域名的可能性。这要求谷歌首先进行DNS托管。启用顶级域名支持需要Google的额外工作(在构建其DNS托管服务之后),但只有在Google控制这两个部分时才有可能。不过,我不知道Google是否会提供此类服务。但人们可以希望。

第二个解决方案是切换到另一个大型提供商。亚马逊可以在顶级域名上托管来自S3的静态网站。但那是因为他们还为该域托管DNS。可能还有其他人。所有大型云提供商都将从一组频繁变化的IP地址中提供数据。因此,如果他们也没有托管您的DNS,他们将需要您在子域上设置CNAME。

第三种(理论上,至少)解决方案是切换到较小的云提供商,提供相同的服务,可能在OpenStack等。因为它们更小,他们的IP路由设置将比一个更简单大型玩家(亚马逊,谷歌等),他们将能够为您提供一小组IP地址,以便在您的顶级域名中设置为A记录。不过,这只是我的一个有根据的猜测。我现在还不知道任何这样的小型云存储提供商。

(好吧,好吧,第四种可能性是放弃静态托管你网站的想法。但就个人而言,我真的很喜欢这个选项,至少从安全和响应的角度来看。)

答案 1 :(得分:10)

这是一个老问题,但如果有人遇到这个帖子,我今天遇到了同样的问题。

Google Domains是我的域名注册商。假设你也是这种情况,请按照以下方式进行设置:

"自定义资源记录" ...

为" www"创建CNAME记录指向" c.storage.googleapis.com"。

"合成记录" ...

选择"子域转发"。输入" mydomain.com"在最左边(子域)输入和" www.mydomain.com"在最右侧(目标网址)输入。

答案 2 :(得分:2)

已经有几年了,但对于任何面临同样问题的人(将“裸域”映射到GCS存储桶),我看到了几种实现这一目标的方法。

一种方法是使用支持“CNAME展平”(又名ALIASANAME记录)的任何 DNS提供商。例如:DNSimpleNS1DynDNS Made EasyCloudflare

Cloudflare也是one of the recommended ways通过HTTPS服务您的存储桶,也可能是save you some money on your egress bill

另一个选择是使用this project通过App Engine提供文件。您可以免费获得SSL,可以在“裸域”上使用它,并且它允许您配置重定向,重写和自定义标头。

答案 3 :(得分:1)

另一种解决方案是使用CloudFlare(免费),它们允许在Zone Apex / Naked Domain / Root Domain上支持CNAME。它适用于我在Google云端存储上的静态网站。

这仍然存在www ....

的问题

适用于我的解决方案是使用CloudFlare  1.将www和裸域CNAME设置为c.storage.googleapis.com  2.将example.com/*的“页面规则”设置为301到http://www.example.com/ $ 1

现在这意味着我的整个网站都在GCloud Storage上(忽略我下面的自我评论,就像我发现'Page Rules'之前那样)

答案 4 :(得分:0)

@Christian Hudon的回答很清楚。我一直在尝试做同样的事情,而且我一直有上面讨论过的问题。你还可以做的是:

创建一个空的(example.com)和另一个WWW(www.example.com)的两个CNAME条目 现在创建两个存储库文件夹:example.com和www.example.com 决定哪一个将托管页面和资产,哪一个只是页面。

让我们说www.example.com是来源,所以你有你的文件夹结构,图像,css,javascripts等...因为网站是静态的你可以做的是添加资产来源的完整域名。

这样的东西
 <link rel="stylesheet" href="http://www.example.com/css/main.css" type="text/css" />

然后将html页面仅复制到example.com。显然,如果你有example.com/contact/index.html,你也需要创建文件夹。

这有点烦人,但这是我能让它发挥作用的唯一方法。如果您需要经常更改内容,但至少它有效,这并不理想,这完全取决于您的需求。

答案 5 :(得分:0)

您可以通过创建指向存储分区的Google Cloud CDN(example.com)来实现此目的。

CDN的负载均衡器应该有一个静态IP地址,您可以将其用作@的A记录。

答案 6 :(得分:0)

由于DNS中的cname限制,您目前无法从Google云存储托管根域。 您将必须在DNS中具有别名记录,该别名记录指向IP地址以服务根域。

Firebase似乎是替代的理想选择,并且对于标准流量几乎免费。此外,托管静态站点的步骤也非常少-使用npm安装firebase cli和一些部署命令。然后,您可以通过将它们添加到DNS的别名记录中,从Firebase控制台获取可连接到域的IP列表。

https://firebase.google.com/docs/hosting

答案 7 :(得分:-2)

是的,这是可能的,并在此处记录:https://developers.google.com/storage/docs/website-configuration

基本上,您需要将CNAME重定向设置为c.storage.googleapis.com