サイトリニューアル時のApache設定
既存のサイトがEC2上で動いており、リニューアルのため新しいEC2上に新しいコンテンツを乗せて、既存のDNSレコードをバツンと切り替えたい!(=そうすればURLは変更不要)という話があったので、その中でつまづいたポイントを備忘として記載します。 既存EC2の前段にELBがあり、新サイトはそれとは別にEC2およびELB構成で環境構築していました。 その際、新サイトのテスト中はテスト用のDNSレコードを作成して ALIASレコードとして新サイト用のELBに紐付けをし、新サイトのEC2にはApache2.4系を入れて、vhosts設定を既存のものと一緒にして(既存のApacheは2.2系なので書き方は一部変えて)、テスト用のindex.htmlを置いてSGを社内IPのみアクセス可能にし、さぁテスト!というところで、あれ。。
問題1. ELB(今回はCLB)のインスタンスがOutofServiceになる
これはCLBなので、ヘルスチェックをTCPにしてやる必要があった・・・
これでOutofServiceは解消し、無事InServiceに!と喜んでいるとブラウザ確認時にまた問題発生。 テスト用レコードでアクセスしてみると白い画面が・・・。ただ応答は200で返る。。
問題2. テスト用DNSレコードでのブラウザアクセス時に白い画面が表示される
アクセスログ、エラーログを確認するとエラーははいていないが、どうやらvhosts側の設定ファイルが効いてない模様。 カスタムログを設定したのに、ログがはかれないし、vhosts側で記載したドキュメントルートを認識していない。http.confの方の/var/www/htmlをドキュメントルートとして認識している。
これに関しては以下の2つがハマりポイントでした。
httpd.confのInclude設定がデフォルトのままだと、conf.d配下になっていた・・・
▼ デフォルト
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
▼ 修正後(バーチャルホスト設定があるパスを指定)
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf/vhosts/*.conf
vhosts側の設定ファイル内のServerNameをテスト用レコードと合わせる必要があった・・・
以下のような条件
・テスト用レコード:test-www.sample.jp
・Apacheのvhosts設定ファイル:www.sample.conf
▼ www.sample.confの中身
# www.sample.jp <VirtualHost *:80> ServerName www.sample.jp DocumentRoot /var/www/html/www.sample.jp ErrorLog /var/log/httpd/www.sample.jp-error_log CustomLog /var/log/httpd/www.sample.jp-access_log combined <Directory /var/www/html/www.sample.jp> AllowOverride All Require all granted </Directory> </VirtualHost>
(誤)ServerName www.sample.jp
(正)ServerName test-www.sample.jp
ということでした。
公式ドキュメントはこちらを参照。とても勉強になりました。
現在のリリースでは Apache は DNS逆引きを使用して このバーチャルホストの ServerName を見つけます。 その逆引きが失敗した場合は部分的にバーチャルホストを無効にします (Apache 1.2 より前では起動すらしません)。 バーチャルホストが名前ベースであれば完全に無効になりますが、 IP ベースであれば概ね動作します。しかしながら、サーバ名を 含む完全な URL を生成しなければならない場合は、正しい URL の生成ができません。