如何使用裸域配置 Google Domains + Heroku

Posted

技术标签:

【中文标题】如何使用裸域配置 Google Domains + Heroku【英文标题】:How to configure Google Domains + Heroku w a Naked Domain 【发布时间】:2017-05-14 09:40:46 【问题描述】:

我在使用 Heroku 和 Google Domains 的网络浏览器中加载了一个域。现在域加载了 www:http://www。 XXX .com。

如果我输入不带 WWW 的 URL,例如 http:// XXX .com,我会在 Chrome 中收到以下错误:“找不到 XXX.com 的服务器 DNS 地址”

我需要做什么才能发生以下情况:

    这会加载 - http://mydomain.com http://www。 mydomain.com 重定向到 http://mydomain.com

谢谢

【问题讨论】:

@michaelsnowden,我认为可以实现。你试过我的答案了吗? @Jeremie 我会尽快尝试并报告 【参考方案1】:

建议将www 子域设置为此处的默认值,以便根/裸域重定向到www。这与Heroku recommendations 一致,其中指出:

为了获得最大的可扩展性和弹性,应用程序应避免使用 DNS A 记录,而是使用支持 CNAME 的 DNS 提供程序 顶点的功能,或专门使用子域

您可以使用 Google Domains 合成记录实现此目的:

转到合成记录部分 选择子域转发 输入@作为子域,输入www.xyz.com作为目标

【讨论】:

但是 OP 希望浏览器中的 URL 显示为 http://mydomain.com。你是说这是不可能的/推荐的? @michaelsnowden:为了可扩展性和弹性,不建议这样做,除非您的 DNS 提供商在顶点支持 CNAME(或 ALIAS 或 ANAME)。您可以看到 Google Domains 没有:support.google.com/domains/answer/3251147。 Heroku 确实列出了这些:devcenter.heroku.com/articles/… 这令人失望。我觉得根域看起来好多了,但我已经购买了一个谷歌域。感谢权威解答。【参考方案2】:

另一种解决方案是使用 Cloudflare 等第三方 DNS 提供商来执行此操作。我刚刚经历了同样的过程。应用托管在 Heroku 上,域名从 Google 购买。在 Cloudflare 上注册了一个免费帐户,并按照本指南在大约一个小时内启动并运行:https://support.cloudflare.com/hc/en-us/articles/205893698

我做过的事情:

删除我之前尝试在“自定义资源记录”下添加到 Google 的 DNS 规则 在 Heroku 中只为根添加了一个域:“myapp.com”(not“www.myapp.com”,not“*.myapp.com ") 这给了我一个像“blah-blah-12345-herokudns.com”这样的 DNS 地址

在 Cloudflare 的 DNS 页面上添加两条 CNAME 记录:

    CNAME "myapp.com" blah-blah-12345-herokudns.com CNAME "www" blah-blah-12345-herokudns.com
将自定义 DNS 名称服务器从 Cloudflare 复制到 Google 中

在那之后,我现在可以去myapp.com,它就可以工作了。超级激动,因为我真的不想要www.myapp.com

一件很酷的事情是我已经为该域设置了一个 GSuite 帐户,当我注册 Cloudflare 时,它​​从 Google 导入了所有 DNS 规则,包括电子邮件的 MX 记录,因此它可以无缝运行。

【讨论】:

这需要时间吗?我完全按照这些步骤操作,但它不起作用:( IIRC 它几乎立即起作用。我要么检查所有这些东西以确保它们是正确的(这绝对是令人困惑的)否则也许他们改变了它的工作方式,因为我发布了这个:/【参考方案3】:

恕我直言,您应该:

1/ 将您的 Heroku 域设置为 http://example.com。所有信息都在Heroku documentation。

Heroku 应该使用 http://example.com 为您的网站提供服务。

2/ 您需要在 Google Domains 中将您的 http://www.example.com 重定向到 http://example.com。为此,您需要在网站选项卡下的 Google 域控制台中设置网络转发。 documentation 直截了当。

任何http://www.example.com 请求都应转发到http://example.com。

更新

由于您的需要,我想知道是否最好不要禁用裸到 www 重定向,让两个域都指向您的 heroku 实例并为它们获取 SSL 证书(使用 let's encrypt 让事情变得容易)。

这是tutorial。

我希望这会有所帮助!

【讨论】:

我不能使用网络转发来做到这一点,因为唯一的选择是“将 example.com 和 www.example.com 都重定向到现有网站”,如果我输入“example.com” ,然后它会显示“您不能将网站转发给它自己!”。 @michaelsnowden 我用另一种方法编辑了我的答案。 我认为我不能在 Heroku (***.com/a/9400862/2770572) 上使用 htaccess。此外,example.com 不指向我的 Heroku 实例——example.com 重定向到 www.example.com,它指向我的 Heroku 实例。 我在 Google Domains 中有两个设置。 1)“合成记录”,它是通过“临时重定向(302)”从子域“example.com”到“example.com”的“子域转发”,没有“路径转发”。 2)“自定义资源记录”,类型为“CNAME”,名称为“www”,数据为“www.example.com.herokudns.com”。我需要使用“www.example.com.herokudns.com”而不是“example.herokuapp.com”才能让他们的 SSL 工作。 所以,www 域有效,这是预期的行为。但是裸域是重定向到 www 还是重定向到 self?您将“子域“example.com”写入“example.com”;'。

以上是关于如何使用裸域配置 Google Domains + Heroku的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Cloudfront 将裸域重定向到 www?

如何将裸域转发到谷歌应用托管站点的 www.domain

使用 Google Domains 和 Cloudflare 时转发电子邮件 [关闭]

将CNAME条目添加到裸域

将域名转移到 Google Domains

将 GoDaddy 裸域添加到 Heroku 应用