假设我正在运行我的应用程序
sakana.herokuapp.com
我拥有域名www.fishywebsites.com
如果我将我的 DNS CNAME指向fishywebsites指向sakana.herokuapp.com,那是否足以使网站正常呈现?
做什么
heroku domains:add www.fishywebsites.com
真的吗?
假设我正在运行我的应用程序
sakana.herokuapp.com
我拥有域名www.fishywebsites.com
如果我将我的 DNS CNAME指向fishywebsites指向sakana.herokuapp.com,那是否足以使网站正常呈现?
做什么
heroku domains:add www.fishywebsites.com
真的吗?
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.baz
to添加 CNAME 条目*.herokuapp.com
,您将成功将该名称连接到路由网格。但是,在您之前heroku domains:add foo.bar.baz
,Heroku 不知道哪个应用程序应该接收这些请求——它会看到Host: foo.bar.baz
,并且不知道涉及哪个应用程序。DNS 查找在 HTTP 下的一层运行,您需要两者来路由您的应用程序。
heroku domains:add www.fishywebsites.com
告诉 heroku 到 www.fishywebsites.com 的每个请求都应该路由到您的应用程序(在本例中是 sakana 应用程序)。
所以不幸的是,将 www.fishywebsites.com 指向 heroku 是不够的。请记住,应用程序可以有任何名称,并且域不需要计算应用程序的名称,这对于 heroku 来说可能更快地根据用户设置更新其 dns 和路由系统,而不是猜测在哪里重定向每个请求。
无论如何,将域添加到 heroku 不会超过 1 分钟,没什么大不了的。