サイトリニューアル時の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にしてやる必要があった・・・ f:id:tomomiik:20200212235718p:plain

これで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

ということでした。

公式ドキュメントはこちらを参照。とても勉強になりました。

現在のリリースでは ApacheDNS逆引きを使用して このバーチャルホストの ServerName を見つけます。 その逆引きが失敗した場合は部分的にバーチャルホストを無効にします (Apache 1.2 より前では起動すらしません)。 バーチャルホストが名前ベースであれば完全に無効になりますが、 IP ベースであれば概ね動作します。しかしながら、サーバ名を 含む完全な URL を生成しなければならない場合は、正しい URL の生成ができません。

httpd.apache.org