让我说我的应用正在运行
sakana.herokuapp.com
我拥有域 www.fishywebsites.com
如果我将我的DNS CNAME 指向 fishywebsites 指向 sakana.herokuapp.com ,那么这不应该足以呈现网站好吗?
做什么
heroku domains:add www.fishywebsites.com
实际上呢?
答案 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分钟,这不是什么大问题。