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

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の名前。

  • Name: www
  • Type: CNAME
  • Value: example.herokuapp.com

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をして、次のように。

  • Name:(空欄)
  • Type: A
  • Alias: Yes
  • Alias Target: S3 Website Endpointに先ほど登録したBucket名が表示されているので、それを選択。

セーブします。

DNSサーバー設定

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

  • ns-904.awsdns-49.net
  • ns-1254.awsdns-28.org
  • ns-1840.awsdns-38.co.uk
  • ns-65.awsdns-08.com

ドメインを管理している会社(ムームードメインとか)のコントロールパネルにいって、
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

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた