web-dev-qa-db-ja.com

Herokuアプリを指すApexドメイン(wwwなし)にDNSを設定するにはどうすればよいですか?

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アプリを正しく指すようにするために使用する正しい設定は何ですか?

89
mrks

(注:root、base、apexドメインはすべて同じものです。google-fooの代わりに使用します。)

従来、Apexドメインを指すには、サーバーのIPを指すAレコードを使用していました。このソリューションは拡張性がなく、頻繁に変更される複数のバックエンドがリクエストへの応答を担当するHerokuのようなクラウドプラットフォームには実行できません。

サブドメイン(www.example.comなど)の場合、your-app-name.herokuapp.comを指すCNAMEレコードを使用できます。以降、Herokuはyour-app-name.herokuapp.comの背後にある動的なAレコードを管理し、常に最新の状態にします。残念ながら、DNS仕様では、ゾーンの頂点(ベースドメイン)でのCNAMEレコードは許可されていません。 (たとえば、CNAMEが最初にターゲットに追従するため、MXレコードが壊れます。)

ルートドメインに戻ると、単純で一般的な解決策は、それらをまったく使用しないことです。フォールバック対策として、一部のDNSプロバイダーは、HTTPリダイレクトのセットアップを提供しています。その場合、example.comwww.example.comへのHTTPリダイレクトになるように設定します。

一部のDNSプロバイダーは、ゾーン頂点でのCNAMEのような動作を許可するカスタムソリューションを開発しています。私の知る限り、 DNSimpleのALIASレコード および DNS Made EasyのANAMEレコード ;どちらも同様に動作します。

これらを使用して、次のようにレコードを設定できます(ゾーンファイル表記を使用して、おそらく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を前述のプロバイダーのいずれかに切り替えるには、現在のドメインレジストラーでネームサーバーレコードを更新するだけです。ドメイン登録を移管する必要はありません。

138
kch

Herokuでホストされるアプリケーションでapex/root/nakedドメインを指すには、CNAMEのようなレコード(多くの場合、ALIASまたはANAMEレコードと呼ばれる)をサポートするDNSプロバイダーを使用する必要があります。現在、Heroku 推奨

どちらを選択しても、記録は次のようになります。

レコード:ALIASまたはANAME

名前:emptyまたは@

ターゲット:example.com.herokudns.com.

必要なのはそれだけです。


ただし、 SEOには適していません wwwバージョンとwww以外のバージョンの両方を解決することです。 1つは正規URLとしてもう1つを指す必要があります。これをどのように決定するかは、HTTPSを使用しているかどうかによって異なります。そうでない場合は、おそらくHerokuになっているはずです SSL証明書を自動的に処理します 有料のdynoで実行されているすべてのアプリケーションに対して自動的かつ無料で。

HTTPSを使用していない場合は、名前wwwからhttp://example.comを指すほとんどのDNSプロバイダーで301リダイレクトレコードを設定するだけです。

HTTPSを使用している場合、ほとんどの場合、アプリケーションレベルでリダイレクトを処理する必要があります。理由を知りたい場合は、これらの short および long の説明を確認してください。ただし、基本的にはDNSプロバイダーまたは他のURL転送サービスにはないため、必要はありません。 SSL証明書と秘密キーを使用すると、ドメインのHTTPSリクエストに応答できません。

アプリケーションレベルでリダイレクトを処理するには、以下を行う必要があります。

  • Apexとwwwの両方のホスト名をHerokuアプリケーションに追加します(heroku domains:add example.comおよびheroku domains:add www.example.com
  • SSL証明書を設定する
  • 上記のALIASまたはANAMEレコードを使用して、ApexドメインレコードをHerokuに向けます
  • 名前wwwwww.example.com.herokudns.com.を指すCNAMEレコードを追加します
  • そして、アプリケーションで、wwwリクエストを非www URLに301リダイレクトします( 例はこちら Djangoでそれを行う方法)
  • また、アプリケーションでは、おそらくHTTPリクエストをHTTPSにリダイレクトする必要があります(たとえば、 Django set SECURE_SSL_REDIRECT to True

詳細については、DNSimpleの this post をご覧ください。

3
Jeff Bowen

現在、Google Apps(メール用)とHerokuをWebサーバーとして使用しています。 Google Apps 301のパーマネントリダイレクト機能を使用して、ネイキッドドメインをWWW.your_domain.comにリダイレクトしています

詳細な手順については、こちらをご覧ください https://stackoverflow.com/a/20115583/1440255

3
Leo Tulipan

CNAMEはすべてのデータ型をカバーするエイリアス機能であるため、ドメインのCNAMEレコードを持つことは許可されません(クライアントがMX、NSまたはSOAを探すかどうかに関係なく)記録)。また、CNAMEは常にIPアドレスではなく新しい名前を参照するため、実際には1行に2つのエラーがあります。

@                        IN CNAME   88.198.38.XXX

そのCNAMEをAレコードに変更すると、使用するIPアドレスがHerokuアプリに適したものである限り、動作するはずです。

DNSでブラウザーで単純なdomain.com名を機能させるための唯一の正しい方法は、Aレコードを持つIPアドレスをドメインに向けることです。

2
krisku