heroku域名是什么:在窗帘后面添加真的吗?

时间:2012-12-05 22:38:50

标签: ruby-on-rails heroku dns cname

让我说我的应用正在运行

sakana.herokuapp.com

我拥有域 www.fishywebsites.com

如果我将我的DNS CNAME 指向 fishywebsites 指向 sakana.herokuapp.com ,那么这不应该足以呈现网站好吗?

做什么

heroku domains:add www.fishywebsites.com

实际上呢?

2 个答案:

答案 0 :(得分:3)

Heroku的routing mesh接受传入的HTTP请求,并在它绕着dyno网格移动时将它们发送到相应的应用程序。为此,它依赖于HTTP Host:标头,该标头对应于浏览器地址栏中的域名。

Heroku有一个通配符DNS条目,可将*.herokuapp.com映射到路由网格。您可以连接到此空间内的任何名称,例如http://0gtxygq7t0haalc4.herokuapp.com/,即使没有该名称的应用程序 - 您连接到路由网格,它根据Host:标头执行查找,并确定没有合理的方法来路由此请求。

打破这种局面:浏览器会看到完整的网址,并提取域名。然后进行DNS查找:

$ dig 0gtxygq7t0haalc4.herokuapp.com
; <<>> DiG 9.8.3-P1 <<>> 0gtxygq7t0haalc4.herokuapp.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38567
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;0gtxygq7t0haalc4.herokuapp.com.    IN  A

;; ANSWER SECTION:
0gtxygq7t0haalc4.herokuapp.com. 60 IN   A   23.21.103.189

;; Query time: 128 msec
;; SERVER: 2001:470:20::2#53(2001:470:20::2)
;; WHEN: Wed Dec  5 17:04:36 2012
;; MSG SIZE  rcvd: 64

这告诉浏览器连接到23.21.103.189。将其与协议(http)配对,它在端口80上建立到该IP的TCP连接。路由网络不知道或不关心您是如何找到它的,因为DNS查找涉及一组完全独立的服务器 - 它只知道你正在连接它。

然后,浏览器会发送以下内容:

GET / HTTP/1.1
Host: 0gtxygq7t0haalc4.herokuapp.com
...

这是Heroku路由网格找出你想要的网站的时候。

如果您将foo.bar.baz的CNAME条目添加到*.herokuapp.com,您将成功将该名称连接到路由网格。但是,在您heroku domains:add foo.bar.baz之前,Heroku不知道哪个应用程序应该接收这些请求 - 它会看到Host: foo.bar.baz,并且它不知道涉及哪个应用程序。 DNS查找在HTTP下面的层上运行,您需要两者才能路由您的应用程序。

答案 1 :(得分:0)

heroku domains:add www.fishywebsites.com

告诉heroku,每个发送到www.fishywebsites.com的请求都应该路由到您的应用程序(在这种情况下应用于sakana应用程序)。

所以不幸的是,将www.fishywebsites.com指向heroku是不够的。请记住,一个应用程序可以有任何名称,并且域不需要数学应用程序的名称,并且heroku可能更快根据用户设置更新其dns和路由系统而不是猜测重定向每个请求。

无论如何,将域添加到heroku不应超过1分钟,这不是什么大问题。