假设我的应用程序正在运行
sakana.herokuapp.com
我拥有域名www.fishywebsites.com
如果我将 fishywebsites 的 DNS CNAME 指向 sakana.herokuapp.com ,这是否足以呈现网站还好吗?
做什么
heroku domains:add www.fishywebsites.com
真的吗?
最佳答案
Heroku 的 routing mesh接受传入的 HTTP 请求,并在 dyno 网格周围移动时将它们发送到适当的应用程序。为此,它依赖于 HTTP Host:
header ,该 header 对应于浏览器地址栏中的域名。
Heroku 有一个通配符 DNS 条目,可将 *.herokuapp.com
映射到路由网格。您可以连接到该空间内的任何名称,例如http://0gtxygq7t0haalc4.herokuapp.com/ ,即使没有具有该名称的应用程序 - 您连接到路由网格,路由网格根据 Host:
header 执行查找,并确定没有合理的方法来路由此请求。
分解:浏览器看到完整的 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。将其与协议(protocol) (http
) 配对,它会在端口 80 上建立到该 IP 的 TCP 连接。路由网格不知道也不关心您是如何找到它的,因为 DNS 查找涉及完全独立的一组服务器——它只知道您正在连接到它。
浏览器然后发送如下内容:
GET / HTTP/1.1
Host: 0gtxygq7t0haalc4.herokuapp.com
...
此时 Heroku 路由网格会找到您想要的站点。
如果您将 foo.bar.baz
的 CNAME 条目添加到 *.herokuapp.com
,您将成功将该名称连接到路由网格。但是,在您 herokudomains:add foo.bar.baz
之前,Heroku 不知道哪个应用程序应该接收这些请求 - 它会看到Host: foo.bar.baz
code>,并且它不知道涉及哪个应用程序。 DNS 查找在 HTTP 下面的一层上运行,您需要两者来路由您的应用程序。
关于ruby-on-rails - heroku 域名 :add really do behind the curtains? 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13733790/