ELBからEC2のapacheに対するヘルスチェックが「unhealthy」（301エラー）になる

結果的には「index.html」を配置していなかったという超凡ミスが原因だが、apacheや.htaccessの設定を理解しておらず、丸一日悩んだ・・・。

#環境
AWS EC2にApacheとWordPressをインストールし、AWS ELB（ロードバランサ）を追加。

![Untitled Diagram (1) (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386017/37c94566-4afd-ee32-1341-9084ae7ce1e5.png)

# 事象
EC2にルーティングするためのターゲットグループを作成したところ、ヘルスチェック(※１)が「unhealthy」（301エラー）になった。

※１　EC２ > ロードバランシング（左側のリスト）　> ターゲットグループ　> ターゲットタブ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/386017/f991323a-ee1e-2bdb-1bc2-37114e4b93b9.png)

# 設定確認
ヘルスチェックの設定を確認。httpのポート８０に対してヘルスチェックをしている。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/386017/27e7948e-e913-8941-64b5-57bf55c0664a.png)


# 調査
３０１エラーは対象のページがリダイレクトされているために発生しているとのこと。
このため、EC2へのアクセスは成功しているが、Apacheの何かしらの設定でリダイレクトされていると推測。

#### 1. apacheの設定ファイル を確認。

/etc/httpd/conf/httpd.conf
一番最後の２行に下記の記載がある。
これは、「 /etc/httpd/conf.d」配下の「〇〇.conf」ファイルを全て読み込む、という意味。

```/etc/httpd/conf/httpd.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 で設定可能なものは全て有効にする、という意味。

```/etc/httpd/conf.d/hoge.conf
<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」にリダイレクトするようになっている。

```/var/www/hoge-documentroot/.htaccess
# 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` だと表示されないので注意）

### 参考
[\.htaccessとは？ \- Qiita](https://qiita.com/gnk0096/items/7e5bd6e8dc9b04c9978e)

# 原因
ドキュメントルート直下に、「index.html」が存在せず、「index.php」にリダイレクトしていたのが原因と考えられる。

# 対処
### 1. ドキュメントルート直下にindex.htmlを作成

```/var/www/hoge-documentroot/index.html
hello world
```
### 2. apacheを再起動
`service httpd restart`

# 対処（2019/4/7追記）
ELB経由で表示したいのはindex.htmlではなくてWordPressのindex.phpだったため、下記の対処を実施する必要があった。

### 1. ヘルスチェック（※２）のパスを「/index.php」に変更
![image.png](https://qiita-image-store.s3.amazonaws.com/0/386017/1e25acb7-929e-8efa-ff55-30ffbf1486b9.png)

※２　EC２ > ロードバランシング（左側のリスト）　> ターゲットグループ　> ヘルスチェックタブ

### 2. 「 /etc/httpd/conf.d」配下の設定ファイル を変更。
.httaccessの設定を無効にする。

```/etc/httpd/conf.d/hoge.conf
// ... 略
    <Directory "/var/www/tf4-documentroot">
        AllowOverride None
    </Directory>
// ... 略
```


### 2. apacheを再起動
`service httpd restart`

# 結果
ELBのヘルスチェックが「healty」になった！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/386017/a2c4ff8d-dd49-c8b9-4c7d-38a86cc07405.png)