herokuのサービスでwww.hogehoge.comをサービスのドメインとして、使っているときに、hogehoge.comにアクセスしてもサービスを使えるようにしたい。
しかも、できれば、そのときブラウザに表示するURLはhogehoge.comではなく、(Google Analyticsとか諸々の都合で)www.hogehoge.comにしてしまいたいときに、DNS変えただけではURLをwwwありに変更できないので、rack_rewriteを使ってリダイレクトしたよ、というはなし。
前提
- herokuでSSL アドオンを使ってhttpsアクセス可能なアプリケーションを公開している
- 既にwww.hogehoge.comでサービスを公開している
- DNSは、www.hogehoge.comは、hogehoge.herokussl.comへのCNAMEが設定されている
手順
- rack_rewriteのインストール
- initializerの追加
- heroku側でのドメインの追加
- DNSでAレコードの追加
rack_rewriteのインストール
Gemfileに
gem 'rack_rewrite'
と書くだけ。自分のときは、最新版の1.3.3がインストールされた。
initializerの追加
/config/initializers/rack_rewrite.rbに以下を記述
アプリをホスティングしているところのDNSサーバーが自分の管理下にないときに強引にCNAMEっぽいことをしたければ、このようにしろ、と本家サイト書いてあった。自分はDNSが管理下にあるけど、やりたいのはCNAMEそのものではなく、リダイレクト。
if ENV['RACK_ENV'] == 'production' MyAppName::Application.config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do r301 %r{.*}, 'http://www.hogehoge.com$&', :if => Proc.new {|rack_env| rack_env['SERVER_NAME'] == 'hogehoge.com' } end end
heroku側でのドメインの追加
wwwなしでアクセスしてきても受け付けられるようにheorku側でも設定しておく。
$ heroku domains:add hogehoge.com --app hogehoge
※herokuで複数のアプリを運用していない場合は、最後の--appオプションは不要
DNSの設定
これは使っているDNSサービスの設定方法にしたがって、設定する。
hogehoge.comのAレコードに、heroku用のAレコードを追加しておく。
75.101.163.44 75.101.145.87 174.129.212.2