sessanの日記

主に開発技術関連でお勉強したことをまとめていくサイトです。

rack_rewriteをつかってwwwなしのリクエストをwwwありのドメインにリダイレクトする

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