Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为指向Heroku应用程序的apex域(无www)设置DNS?_Heroku_Dns - Fatal编程技术网

如何为指向Heroku应用程序的apex域(无www)设置DNS?

如何为指向Heroku应用程序的apex域(无www)设置DNS?,heroku,dns,Heroku,Dns,我已经在Heroku应用程序中添加了一个自定义域,它可以与www.domain.com一起使用 我需要知道如何在不使用www的情况下设置域来解析应用程序 以下是我当前的DNS设置: $TTL 86400 @ IN SOA ns1.first-ns.de. postmaster.robot.first-ns.de. ( 2013041500 ; serial 14400 ; refresh 1800 ; retry 604800

我已经在Heroku应用程序中添加了一个自定义域,它可以与
www.domain.com
一起使用

我需要知道如何在不使用
www
的情况下设置域来解析应用程序

以下是我当前的DNS设置:

$TTL 86400
@   IN SOA ns1.first-ns.de. postmaster.robot.first-ns.de. (
    2013041500   ; serial
    14400        ; refresh
    1800         ; retry
    604800       ; expire
    86400 )      ; minimum

@                        IN NS      robotns3.second-ns.com.
@                        IN NS      robotns2.second-ns.de.
@                        IN NS      ns1.first-ns.de.

@                        IN A       88.198.38.XXX
localhost                IN A       127.0.0.1
mail                     IN A       88.198.38.XXX
ftp                      IN CNAME   www
imap                     IN CNAME   www
loopback                 IN CNAME   localhost
pop                      IN CNAME   www
relay                    IN CNAME   www
smtp                     IN CNAME   www
www                      IN CNAME   appname.herokuapp.com.
@                        IN MX 10   mail

要使用哪些正确设置才能使
example.com
www.example.com
正确指向我的Heroku应用程序?

您不允许拥有域的CNAME记录,因为CNAME是一种覆盖所有数据类型的别名功能(无论客户端是查找MX、NS还是SOA记录)。CNAMEs也总是引用一个新名称,而不是ip地址,因此在一行中实际上有两个错误

@                        IN CNAME   88.198.38.XXX
如果您使用的ip地址是Heroku应用程序的正确ip地址,将该CNAME更改为A记录应该可以使其正常工作

在DNS中,使一个简单的
domain.com
名称在浏览器中工作的唯一正确方法是将域指向具有a记录的IP地址

(注意:根域、基域和顶点域都是相同的。可替换地用于GoogleFoo。)

传统上,要指向apex域,您需要使用指向服务器IP的A记录。此解决方案不可扩展,对于Heroku这样的云平台来说也不可行,因为在Heroku中,多个且经常变化的后端负责响应请求

对于子域(如
www.example.com
),您可以使用指向
您的app name.herokuapp.com
的CNAME记录。从那以后,Heroku将管理
你的app name.herokuapp.com
后面的动态A记录,以便它们始终是最新的。不幸的是,DNS规范不允许在区域顶点(基本域)上记录CNAME。(例如,MX记录将中断,因为CNAME将首先被跟踪到其目标。)

回到根域,简单而通用的解决方案是根本不使用它们。作为备用措施,一些DNS提供商提供为您设置HTTP重定向。在这种情况下,将其设置为
example.com
是HTTP重定向到
www.example.com

一些DNS提供商提出了自定义解决方案,允许在区域顶点上进行类似CNAME的行为。据我所知,我们有和;两者行为相似

使用这些,您可以将记录设置为(使用zonefile表示法,即使您可能会在其web用户界面上这样做):

记住
@
这里是根域(
example.com
)的缩写。还请注意,尾随点在分区文件和某些web用户界面中都很重要

另见:
评论:
  • 亚马逊的Route 53也有一个别名记录类型,但它有一定的局限性,因为它只适用于AWS中的点。目前,我不建议在Heroku设置中使用此选项

  • 有些人把DNS提供商和域名注册商混为一谈,因为两者都有一些重叠。请注意,要将DNS切换到上述提供商之一,只需使用当前域注册器更新名称服务器记录。您不需要转移您的域注册


我现在使用谷歌应用程序(用于电子邮件)和Heroku作为web服务器。我正在使用Google Apps 301永久重定向功能将裸域重定向到WWW.your_domain.com

您可以在这里找到分步说明

要将apex/root/裸域指向Heroku托管的应用程序,您需要使用支持类似CNAME记录(通常称为别名或ANAME记录)的DNS提供商。目前Heroku:

无论您选择哪一项,您的记录都将如下所示:

记录:
别名
名称

名称:为空或
@

目标:
example.com.herokudns.com.

这就是你所需要的


但是,它需要同时具有www版本和非www版本解析。一个应该指向另一个作为规范URL。您如何决定这样做取决于您是否使用HTTPS。如果你不是,你现在可能应该像Heroku一样,自动地、免费地为所有在付费dynos上运行的应用程序提供服务

如果您不使用HTTPS,您可以设置一个301重定向记录,大多数DNS提供商将name
www
指向
http://example.com

如果您使用的是HTTPS,则很可能需要在应用程序级别处理重定向。如果您想知道原因,请查看以下内容和说明,但基本上,由于您的DNS提供商或其他URL转发服务没有、也不应该有您的SSL证书和私钥,它们无法响应您域的HTTPS请求

要在应用程序级别处理重定向,您需要:

  • 将apex和www主机名添加到Heroku应用程序中(
    Heroku域:Add example.com
    Heroku域:Add www.example.com
  • 如上所述,使用别名或ANAME记录将apex域记录指向Heroku
  • 添加名为
    www
    指向
    www.example.com.herokudns.com的CNAME记录。
  • 然后在应用程序中,301将所有www请求重定向到非www URL(在Django中如何实现)
  • 同样在应用程序中,您可能应该将所有HTTP请求重定向到HTTPS(例如,将
    安全\u SSL\u重定向
    设置为

从DNSimple查看更多信息。

好的,但我如何才能找到我的IP?通过主机appname.herokuapp.com/www.domain.com,我只得到了这样一个IP:107.20.162.205(没有这样的Heroku应用程序),IP就是要使用的IP。你不能用t测试
@   IN ALIAS your-app-name.herokuapp.com.
www IN CNAME your-app-name.herokuapp.com.