簡體   English   中英

如何為指向 Heroku 應用程序的頂級域(無 www)設置 DNS?

[英]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.comwww.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 推薦

無論您選擇哪一個,您的記錄都將如下所示:

記錄: ALIASANAME

名稱:空或@

目標: example.com.herokudns.com.

這就是你所需要的。


但是,同時解析 www 版本和非 www 版本對 SEO來說並不好 一個應該指向另一個作為規范 URL。 您決定如何執行此操作取決於您是否使用 HTTPS。 如果你不是,你可能應該像 Heroku 現在自動為你處理 SSL 證書,並且對於在付費 dynos 上運行的所有應用程序都是免費的。

如果您不使用 HTTPS,您可以設置 301 重定向記錄,大多數 DNS 提供商將名稱www指向http://example.com

如果您正在使用HTTPS,你很可能需要處理在應用層重定向。 如果你想知道為什么,看看這些短期長期的解釋,但基本上,因為你的DNS提供商或其他URL轉發服務沒有,並且不應該有,你的SSL證書和私鑰,他們不能到HTTPS響應請求您的域。

要在應用程序級別處理重定向,您需要:

  • 將您的 apex 和 www 主機名添加到 Heroku 應用程序( heroku domains:add example.comheroku domains:add www.example.com
  • 設置您的 SSL 證書
  • 如上所述,使用 ALIAS 或 ANAME 記錄將您的頂級域記錄指向 Heroku
  • 添加名稱為www的 CNAME 記錄,指向www.example.com.herokudns.com.
  • 然后在您的應用程序中,301 將所有 www 請求重定向到非 www URL(是如何在 Django 中執行此操作的示例
  • 同樣在您的應用程序中,您可能應該將任何 HTTP 請求重定向到 HTTPS(例如, 在 Django中將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM