[英]How do I set up DNS for an apex domain (no www) pointing to a Heroku app?
我已經向我的 Heroku 應用程序添加了一個自定義域,它適用於www.domain.com
。
我也需要知道如何設置沒有www
的域來解析應用程序。
這是我當前的 DNS 設置:
$TTL 86400
@ IN SOA ns1.first-ns.de. postmaster.robot.first-ns.de. (
2013041500 ; serial
14400 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
@ IN NS robotns3.second-ns.com.
@ IN NS robotns2.second-ns.de.
@ IN NS ns1.first-ns.de.
@ IN A 88.198.38.XXX
localhost IN A 127.0.0.1
mail IN A 88.198.38.XXX
ftp IN CNAME www
imap IN CNAME www
loopback IN CNAME localhost
pop IN CNAME www
relay IN CNAME www
smtp IN CNAME www
www IN CNAME appname.herokuapp.com.
@ IN MX 10 mail
使用哪些正確設置才能使example.com
和www.example.com
都正確指向我的 Heroku 應用程序?
(注意:root、base、apex 域都是一樣的。google-foo 可以互換使用。)
傳統上,要指向您的頂級域,您將使用指向服務器 IP 的 A 記錄。 此解決方案無法擴展,也不適用於 Heroku 等雲平台,其中多個且經常更改的后端負責響應請求。
對於子域(如www.example.com
),您可以使用指向your-app-name.herokuapp.com
CNAME 記錄。 從那時起,Heroku 管理your-app-name.herokuapp.com
背后的動態 A 記錄,以便它們始終保持最新狀態。 不幸的是,DNS 規范不允許在區域頂點(基本域)上進行 CNAME 記錄。 (例如,MX 記錄會中斷,因為 CNAME 將首先跟隨其目標。)
回到根域,簡單而通用的解決方案是根本不使用它們。 作為后備措施,一些 DNS 提供商提供為您設置 HTTP 重定向。 在這種情況下,將其設置為example.com
是到www.example.com
的 HTTP 重定向。
一些 DNS 提供商提出了自定義解決方案,允許在區域頂點上進行類似 CNAME 的行為。 據我所知,我們有DNSimple 的 ALIAS 記錄和DNS Made Easy 的 ANAME 記錄; 兩者的行為相似。
使用這些,您可以將您的記錄設置為(使用 zonefile 符號,即使您可能會在他們的 Web 用戶界面上執行此操作):
@ IN ALIAS your-app-name.herokuapp.com.
www IN CNAME your-app-name.herokuapp.com.
請記住@
此處是根域 ( example.com
) 的簡寫。 還請注意,尾隨點很重要,無論是在區域文件中還是在某些 Web 用戶界面中。
Amazon 的 Route 53 也有一個 ALIAS 記錄類型,但它有一定的局限性,因為它只能指向 AWS 內部。 目前我不建議將它用於 Heroku 設置。
有些人將 DNS 提供商與域名注冊商混淆,因為與同時提供兩者的公司有些重疊。 請注意,要將您的 DNS 切換到上述提供商之一,您只需使用當前的域注冊商更新您的名稱服務器記錄。 您不需要轉移您的域名注冊。
要將您的頂點/根/裸域指向 Heroku 托管的應用程序,您需要使用支持類似 CNAME 的記錄(通常稱為 ALIAS 或 ANAME 記錄)的 DNS 提供商。 目前 Heroku 推薦:
無論您選擇哪一個,您的記錄都將如下所示:
記錄: ALIAS
或ANAME
名稱:空或@
目標: example.com.herokudns.com.
這就是你所需要的。
但是,同時解析 www 版本和非 www 版本對 SEO來說並不好。 一個應該指向另一個作為規范 URL。 您決定如何執行此操作取決於您是否使用 HTTPS。 如果你不是,你可能應該像 Heroku 現在自動為你處理 SSL 證書,並且對於在付費 dynos 上運行的所有應用程序都是免費的。
如果您不使用 HTTPS,您可以設置 301 重定向記錄,大多數 DNS 提供商將名稱www
指向http://example.com
。
如果您正在使用HTTPS,你很可能需要處理在應用層重定向。 如果你想知道為什么,看看這些短期和長期的解釋,但基本上,因為你的DNS提供商或其他URL轉發服務沒有,並且不應該有,你的SSL證書和私鑰,他們不能到HTTPS響應請求您的域。
要在應用程序級別處理重定向,您需要:
heroku domains:add example.com
和heroku domains:add www.example.com
)www
的 CNAME 記錄,指向www.example.com.herokudns.com.
SECURE_SSL_REDIRECT
設置為True
)查看來自 DNSimple 的這篇文章了解更多信息。
我現在使用 Google Apps(用於電子郵件)和 Heroku 作為網絡服務器。 我正在使用 Google Apps 301 永久重定向功能將裸域重定向到 WWW.your_domain.com
您可以在此處找到分步說明https://stackoverflow.com/a/20115583/1440255
不允許您擁有域的 CNAME 記錄,因為 CNAME 是一種別名功能,涵蓋所有數據類型(無論客戶端是否查找 MX、NS 或 SOA 記錄)。 CNAME 也總是指一個新名稱,而不是一個 ip 地址,所以在一行中實際上有兩個錯誤
@ IN CNAME 88.198.38.XXX
將該 CNAME 更改為 A 記錄應該可以使其工作,前提是您使用的 ip 地址是您的 Heroku 應用程序的正確地址。
在 DNS 中使簡單的domain.com
名稱在瀏覽器中工作的唯一正確方法是將域指向具有 A 記錄的 IP 地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.