可以說,我對heroku域名是什麼:在窗簾後面添加真的嗎?
sakana.herokuapp.com
我的應用程序運行和我自己的域www.fishywebsites.com
如果我點我的DNS CNAME爲fishywebsites指向sakana.herokuapp.com,應該不足以渲染網站就好了嗎?
是什麼做
heroku domains:add www.fishywebsites.com
其實呢?
可以說,我對heroku域名是什麼:在窗簾後面添加真的嗎?
sakana.herokuapp.com
我的應用程序運行和我自己的域www.fishywebsites.com
如果我點我的DNS CNAME爲fishywebsites指向sakana.herokuapp.com,應該不足以渲染網站就好了嗎?
是什麼做
heroku domains:add www.fishywebsites.com
其實呢?
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下面的層中運行,並且您需要兩者才能路由應用程序。
heroku domains:add www.fishywebsites.com
告訴給Heroku的是每一個去www.fishywebsites.com請求應該被路由到您的應用程序(在這種情況下,對之魚應用程序)。
因此,不幸的是,將www.fishywebsites.com指向heroku是不夠的。請記住,應用程序可以具有任何名稱,並且域不需要數學應用程序的名稱,並且這可能會更快地讓heroku根據用戶設置更新其dns和路由系統,而不是猜測哪裏重定向每個請求。
無論如何,添加一個域到heroku不應該超過1分鐘,沒有什麼大不了的。
該死的,這是非常豐富和徹底。謝謝 :) – mrBorna