heroku で 独自ドメインを使う際の最善策を考えた

Shunsuke Sawada

herokuで独自ドメインのルートを使うのは結構めんどくさい。
サイトによって情報がいろいろ違うので、何がベストなのかを探ってみました。

ルートドメインとは、www.workabroad.jpではなくてworkabroad.jpのこと。
( apex / bare / naked domainなんて呼ばれることもある)

IPアドレスはない。

herokuでは各アプリに固定のIPは振り当てられません。
ということはDNS設定でAレコードに値を入力できないということ。
困りますね。

いろいろ見てると、AレコードにこのIP入れたらいけるよ、
というブログも見かけましたが、公式ドキュメントによると推奨されていなく、
アクセスが多い時にはアプリのパフォーマンスに影響しますよ、とも言われている。

The Limitations of DNS A-Records

エイリアスを使えと言われても。。

で、公式ドキュメントにはCNAMEのように振る舞うALIASを使うといいよと書いてある。

point the ALIAS or ANAME entry for your apex domain to example.herokuapp.com, just as you would with a CNAME record.

heroku Custom Domains

ただ、ALIASに対応しているDNSホスティングがあまりない。
ドメイン取得したところのDNSを使うことが多いと思うけど、ムームードメインはだめだった。SakuraのVPSを契約しているから見てみたけど、それもダメ。
ということで、他のDNSホスティングサービスを利用することに。

よく見かけるdozensというところはなんとherokオプションなんてのもあって、速攻でできそう!と思ったんだけど、、、思いっきりAレコード!!

dozens

ということで、やめました。
いろいろ見たんだけど、無料のサービスでは難しそうだった。。

Amazon Route53

RailsプロジェクトでAmazon S3使っているので、Route53でやってみることにした。
herokuのDevセンターをドキュメントを参考にしました。
Configuring Amazon Route 53 DNS for your Heroku App

ドメインをherokuに登録

これは管理画面からでもいい。
コマンドでやりたいなら下記。wwwサブドメインも含めて2つ登録すること。

1
2
$ heroku domains:add example.com
$ heroku domains:add www.example.com

Amazon Route53の設定

まずは画面上部からCreate Hosted Zoneを選択。
example.comを入力する。ルートドメインでいい。
amazon route53

で、そのゾーンを編集します。
Create Record Set をクリックして下記のように設定。

Create Record Set

exampleは自分のheroku appの名前。

S3にバケットを作成

実はRoute53だけじゃできなくて、S3も使う。
Create Bucket で新しいバケット作成。
名前はルートドメインにする。ここでは、example.com。
Amazon S3

Propertiesを選択して、Static Website Hostingを選択。
Redirect all requests to another host nameを選びます。
なんのことはない、リダイレクトしてるだけですね。
サブドメイン( www.example.com )を入力してSaveします。

Aレコードの設定

Route53に戻ります。
Create Record Setをして、次のように。

セーブします。

DNSサーバー設定

Route53
左上のHosted Zonesをクリックすると、画面右で確認できます。
にこんなのがあるはず。

ドメインを管理している会社(ムームードメインとか)のコントロールパネルにいって、
DNSサーバーを切り替えましょう。

ムームードメインはこんな画面です。
mumu domain

切替完了です。
Route53のTTL設定で切替の時間を短縮できると思います。

結局wwwだけど。。

ルートドメインにアクセスすると、思いっきりwwwのサブドメインにリダイレクトされます。
そりゃそうです。そう設定したのだから。
ルートドメイン使えてないじゃん!ってなりますけど、ググった限りではこれがアプリにIPをハードコーディングしない最善の方法でした。

ルートのほうが格好よく見えるけど、それはサイト作ってる側の自己満足かもしれない。
ちゃんとユーザーはコンテンツにたどり着くから、今回はこの方法で行くことにした。

でもやっぱりルートが欲しい気持ちもあるので、いい方法があれば教えてください。

参考

Amazon S3による静的Webサイトホスティング

AWS S3 のバケットに独自ドメインを割り当てて、静的ファイルをホスティング

Amazon S3にてルートドメインでWebサイトをホストできるようになりました!

http://code.ttsoft.jp/2013/05/aws-route53-add-domain.html

134
Shunsuke Sawada

おすすめの記事

acts-as-taggable-on タグを表示させる順番を決めたい
Railsを4.2にバージョンアップしたら、Vagrantのローカル開発環境にアクセスできなくなった問題
Railsのバリデーションエラー後にレイアウトが崩れるとき