如何使用裸域配置 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
在那之后,我现在可以去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的主要内容,如果未能解决你的问题,请参考以下文章