ruby-on-rails - heroku 域名 :add really do behind the curtains? 是什么意思

标签 ruby-on-rails heroku dns cname

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

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/

相关文章:

ruby-on-rails - 如何通过使用 select_tag 和 options_from_collection_for_select 来获取选择的值并将其传递给 Controller

ssl - Heroku 删除证书时出现错误

ruby-on-rails - 通过属性将两条记录合并到一个新对象中

ruby-on-rails - 当 Test::Unit 测试运行时,我如何才能看到实际发生了什么?

java - 在heroku上扩展SpringWebFlow应用程序时出现问题

linux - DNS A记录和PTR记录删除

mono - 嵌入单声道混淆

node.js - 在 CNAME 重定向之前拦截流量

ruby-on-rails - Rails 模型测试

ruby-on-rails - 如何获取我的 Heroku 站点的 DNS 记录以与 Google Apps 配合使用?