2

假设我正在运行我的应用程序

sakana.herokuapp.com

我拥有域名www.fishywebsites.com

如果我将我的 DNS CNAME指向fishywebsites指向sakana.herokuapp.com,那是否足以使网站正常呈现?

做什么

heroku domains:add www.fishywebsites.com

真的吗?

4

2 回答 2

3

Heroku 的路由网格接受传入的 HTTP 请求,并在它在测功网格周围移动时将它们发送到适当的应用程序。为此,它依赖于 HTTPHost:标头,该标头对应于浏览器地址栏中的域名。

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

打破它:浏览器看到完整的 URL,并提取域名。然后它会进行 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将其与协议(是你连接到它。

然后浏览器发送如下内容:

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

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

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

于 2012-12-05T23:10:15.970 回答
0
heroku domains:add www.fishywebsites.com

告诉 heroku 到 www.fishywebsites.com 的每个请求都应该路由到您的应用程序(在本例中是 sakana 应用程序)。

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

无论如何,将域添加到 heroku 不会超过 1 分钟,没什么大不了的。

于 2012-12-05T23:07:12.747 回答