結果的には「index.html」を配置していなかったという超凡ミスが原因だが、apacheや.htaccessの設定を理解しておらず、丸一日悩んだ・・・。
#環境
AWS EC2にApacheとWordPressをインストールし、AWS ELB(ロードバランサ)を追加。
事象
EC2にルーティングするためのターゲットグループを作成したところ、ヘルスチェック(※1)が「unhealthy」(301エラー)になった。
※1 EC2 > ロードバランシング(左側のリスト) > ターゲットグループ > ターゲットタブ
設定確認
ヘルスチェックの設定を確認。httpのポート80に対してヘルスチェックをしている。
調査
301エラーは対象のページがリダイレクトされているために発生しているとのこと。
このため、EC2へのアクセスは成功しているが、Apacheの何かしらの設定でリダイレクトされていると推測。
1. apacheの設定ファイル を確認。
/etc/httpd/conf/httpd.conf
一番最後の2行に下記の記載がある。
これは、「 /etc/httpd/conf.d」配下の「〇〇.conf」ファイルを全て読み込む、という意味。
# Load config files in the "Cconf.d" directory, if any.
IncludeOptional conf.d/*.conf
2. 「 /etc/httpd/conf.d」配下の設定ファイルを確認
前にバーチャルホストの設定のために追加した設定ファイルを確認。
ドキュメントルートは「/var/www/hoge-documentroot」に設定。
リダイレクトの設定は特にしていない。
が、真ん中らへんの、「AllowOverride All」に注目。
これは、.htaccess で設定可能なものは全て有効にする、という意味。
<VirtualHost *:80>
DocumentRoot "/var/www/hoge-documentroot"
serverName www.hoge.work
ErrorLog "logs/hoge-error.log"
CustomLog "logs/hoge-access.log" combined
<Directory "/var/www/hoge-documentroot">
AllowOverride All
</Directory>
<Directory "/var/www/hoge-documentroot/wp-admin">
AuthType Digest
AuthName wp-admin-area
AuthUserFile /etc/httpd/conf/htdigest
Require valid-user
</Directory>
</VirtualHost>
3. .htaccessを確認
wordPressをインストールしたディレクトリ(ドキュメントルートに設定している)直下に存在する。(デフォルトで配置される)
設定を見ると、リクエストされたファイルまたはディレクトリが存在しない場合、「index.php」にリダイレクトするようになっている。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
linuxのコマンドだと、ls -la
で確認できる。(.から始まるファイルは ls -l
だと表示されないので注意)
参考
原因
ドキュメントルート直下に、「index.html」が存在せず、「index.php」にリダイレクトしていたのが原因と考えられる。
対処
1. ドキュメントルート直下にindex.htmlを作成
hello world
2. apacheを再起動
service httpd restart
対処(2019/4/7追記)
ELB経由で表示したいのはindex.htmlではなくてWordPressのindex.phpだったため、下記の対処を実施する必要があった。
1. ヘルスチェック(※2)のパスを「/index.php」に変更
※2 EC2 > ロードバランシング(左側のリスト) > ターゲットグループ > ヘルスチェックタブ
2. 「 /etc/httpd/conf.d」配下の設定ファイル を変更。
.httaccessの設定を無効にする。
// ... 略
<Directory "/var/www/tf4-documentroot">
AllowOverride None
</Directory>
// ... 略
2. apacheを再起動
service httpd restart