2013年5月8日水曜日

[AWS]CakePHP+Elastic Beanstalk+Route53+ムームードメインで独自ドメインを使用する方法

ムームードメインのDNSサーバを使用することもでるが、AWS内のサービスで完結できるものはしておいたほうが、よさそうなので、Route53を使うことにした。
あと、Route53だとwwwなしの短いURLアクセスできるようにできるとのこと。(ここここ参照)

1.事前作業

・ムームードメインでの独自ドメインの取得
・Elasctic Beanstalkでの環境構築

2.Route53での設定

参考URL1と2に書いてありますが、以下の流れ。

①Hosted Zoneの作成(Create Hosted Zoneボタンから)

②Record Setの作成(以下の2レコードを作成)
  ・www無し(Nameに何も入れない)
  ・www有り(Nameに'www'と入力)
※Alias Targetは対象環境のELBのA Recordを指定

③4つのネームサーバーを控えておく。
  Record SetsのType列が'NS'である行の'Value列'に入った4つのサーバ名

これでRoute53側の作業は終わり

3.ムームードメインでの設定(レジストラのネームサーバー情報を更新する)

①コンパネ→ドメイン操作→ネームサーバ設定変更というように遷移する。

②「取得したドメインで使用する」を選択し、Route53で控えた4つのネームサーバを入力し保存する。

 ※注意点としてRoute53でコピーした段階ではネームサーバ名の最後にドットが付くが、本手順で   入力する際にはそのドットを削除すること。そうじゃないと、エラーとなって保存されない。

   ex aaaa.awsdns-99.net. →  aaa.awsdns-99.net

③ 15分程度待つと、あなたの独自ドメインにwww有りと無しの両方でアクセスできるようになる。

 4.CakePHPの設定

ここからは参考URL5,6,7参照のこと。
 この段階では、www有りと無しの両方のURLでアクセスすることができる。しかし、SEO的にはどちらかに統一したほうがよいとされている。(こことかで

個人的には短いほうがすきなので、www無しに統一する。

ということで、CakePHP内の.htaccessをいじる。

CakePHPのディレクトリ内には.htaccessがたくさんあるが、どれをいじればよいのかは、どうやら環境によって違うようだ。

参考URL7によると、DocumentRootが設定されている値に依存するようだ。

自分の場合は、[cakephpが入るフォルダ]/app/webroot/直下の.htaccessをいじったら、挙動が変化したので、これをいじっていった。 [cakephpが入るフォルダ]直下の.htaccessをいくらいじっても挙動は変わらなかった。
以下が変更後の状態。(当然mydomainやmydomain.jpはあなたのものに置き換えてね)
3~4行目は、URLにwwwがある場合は、 無しにする部分。
5~6行目は、 ElasticBeansTalkにデフォルトで付与されるURLにアクセスされた場合も、独自ドメインのURLに変更するようにした。
この設定の良いところは、本番環境以外では動作しないところ。つまり、本番環境と開発環境で同じソースを使用できる。開発環境では、www有りとか無しとか考えなくていいからね。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$  http://%1/$1 [R=301,L]
    RewriteCond %{HTTP_HOST} ^mydomain\.elasticbeanstalk\.com$ [NC]
    RewriteRule ^(.*)$  http://mydomain.jp/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule> 

<豆知識>
'%1'はどうやら直近のRewriteCondで正規表現パターン(丸括弧でかこまれた部分)にヒットしたものが入るっぽい。
'$1'はおそらくRewriteRuleの一つ目の正規表現パターンにマッチした部分がはいるっぽい。'$2'は二目の正規表現パターンにマッチしたもの。
Apacheって奥深そう!

[参考URL]
1.Using Custom Domains with AWS Elastic Beanstalk
2.How to Create Alias Resource Record Sets
3.営業でも簡単!Route 53の基本設定
4.Elastic Beanstalkで立ち上げたアプリにRoute53経由で独自ドメイン(サブドメイン無し)を割り振る
5.How to make a 301 redirect for incomming requests from non-www to www in CakePHP
6.Generic non-www to www (and vice versa) 301 redirect using .htaccess
7.Redirect www to non-www

0 件のコメント:

コメントを投稿