2012-12-05 49 views
2

可以說,我對heroku域名是什麼:在窗簾後面添加真的嗎?

sakana.herokuapp.com

我的應用程序運行和我自己的域www.fishywebsites.com

如果我點我的DNS CNAMEfishywebsites指向sakana.herokuapp.com,應該不足以渲染網站就好了嗎?

是什麼做

heroku domains:add www.fishywebsites.com 

其實呢?

回答

3

Heroku的routing mesh接受傳入的HTTP請求,並在圍繞動態網格移動時將它們發送到相應的應用程序。爲此,它依賴於HTTP Host:標題,該標題對應於瀏覽器地址欄中的域名。

Heroku有一個通配符DNS條目,將*.herokuapp.com映射到路由網格。您可以連接到此空間內的任何名稱,例如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)配對,它與端口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下面的層中運行,並且您需要兩者才能路由應用程序。

+0

該死的,這是非常豐富和徹底。謝謝 :) – mrBorna

0
heroku domains:add www.fishywebsites.com 

告訴給Heroku的是每一個去www.fishywebsites.com請求應該被路由到您的應用程序(在這種情況下,對之魚應用程序)。

因此,不幸的是,將www.fishywebsites.com指向heroku是不夠的。請記住,應用程序可以具有任何名稱,並且域不需要數學應用程序的名稱,並且這可能會更快地讓heroku根據用戶設置更新其dns和路由系統,而不是猜測哪裏重定向每個請求。

無論如何,添加一個域到heroku不應該超過1分鐘,沒有什麼大不了的。