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


97

私はすでに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のアプリに正しく指し示すでしょうか?


btwは、ftp / pop / smtpを実行しないherokuを指すwwwを指しているため、ftp / pop / smtp設定がすべて間違っているように見えます。
kch 2013

回答:


145

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

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

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

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

一部の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)。また、zonefilesと一部のWebユーザーインターフェイスの両方で、末尾のドットが重要であることにも注意してください。

以下も参照してください。

備考:

  • AmazonのRoute 53にもALIASレコードタイプがありますが、AWS内でのみ機能するという点で多少制限があります。現時点では、これをHerokuセットアップに使用することはお勧めしません。

  • DNSプロバイダーとドメイン名レジストラーを混同している人もいます。両方を提供している会社とは少し重複しています。DNSを前述のプロバイダーのいずれかに切り替えるには、ネームサーバーレコードを現在のドメインレジストラーで更新するだけでよいことに注意してください。ドメイン登録を移管する必要はありません。



3
dnsimpleについて言及した場合は+1。クラウドプロバイダーとの連携を容易にするための彼らの努力は、それらに切り替えるという私の決定の大きな要因でした。
Subfuzion 2013年

1
@kch BINDでDNSimpleのエイリアスのように動作するDNSレコードタイプを作成する方法を知っていますか?
wlf 2013

1
できるとは思わないでください。これはカスタム機能です。
kch 2013

2
CloudFlareは、CNAMEフラットニングと呼ばれるものを通じてこの機能も提供します。ルートで作成したCNAMEレコードに対してこれが自動的に行われますが、連絡して要求すると、すべてのCNAMEレコードに対してゾーン全体でこれが有効になります。
エイドリアンFrühwirth2014年

4

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

どちらを選択しても、レコードは次のようになります。

記録: ALIASまたはANAME

名前:空または@

目標: example.com.herokudns.com.

それで十分です。


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

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

あなたがいる場合している HTTPSを使用して、あなたが最も可能性の高い必要性は、アプリケーションレベルでのリダイレクトを処理するでしょう。理由を知りたい場合は、これらの短い説明と長い説明を確認してください。ただし、基本的にはDNSプロバイダーやその他のURL転送サービスにはSSL証明書と秘密鍵がないため、そうでないといけないため、HTTPSに応答できません。ドメインのリクエスト。

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

  • apexとwwwの両方のホスト名をHerokuアプリケーションに追加します(heroku domains:add example.comおよびheroku 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のこの投稿をご覧ください。


3

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

あなたはここでステップバイステップの説明を見つけることができます https://stackoverflow.com/a/20115583/1440255


2

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

@                        IN CNAME   88.198.38.XXX

そのCNAMEをAレコードに変更すると、使用するIPアドレスがHerokuアプリの正しいアドレスである限り、機能するはずです。

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


わかりましたが、どうすれば自分のIPを確認できますか?ホストappname.herokuapp.com/www.domain.comを介して、次のようなIPを取得します:107.20.162.205(そのようなHerokuアプリはありません)
mrks

1
そのIPが使用するものです。Herokuは、使用しようとしているアプリの名前を知っている必要があるため、IPアドレスを使用してブラウザーでテストすることはできません。DNSでAレコードを設定し、thannでテストするだけで、Herokuに使用している名前が表示され、すべて正常に動作するはずです。
krisku 2013

わかりましたが、「host appname.herokuapp.com」の後に毎回別のIPを取得します。
mrks 2013

2
host app-name.herokuapp.com結果は動的です。それらをハードコーディングすると、アプリは最終的に機能しなくなります。別のコメントで推奨されているANAME / CNAMEソリューションを参照してください。
kch 2013

1
domain.com-> www.domain.comからのHTTPリダイレクトを実行し、domain.comをそのIPアドレスにポイントできる、変化しないIPアドレスを持つWebサーバーが必要です。次に、www.domain.comのCNAMEで実際のherokuアプリをポイントできます。
krisku 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.