#はじめに
ELB⇒EC2の構成で、ダイジェスト認証を行っているサーバーに対してヘルスチェックを行う際、
ずっとステータスがOutofService
で、解決するのに時間がかかてつぃまった。。。
#原因
ヘルスチェック対象のサーバーに、Digest認証やBasic認証がある場合、ヘルスチェックも妨害されてしまう。。。
Apacheのアクセスログに、401エラー
が出ていました。
⇒401エラー
は認証を必要としているエラーです。
Apacheのステータスコードについてはこちら
#解決策
ヘルスチェックの通信を除外するように、設定ファイルに追記しました!
基本はlocationタブ内の範囲を、設定ファイルに追記すれば大丈夫なはずです。
/etc/httpd/conf/httpd.confだけ使っていれば、httpd.confに追記します。
バーチャルホストを使用しているのであれば、各バーチャルホストの設定ファイルに書いていきましょう。
※バーチャルホストを使用している場合は、httpd.confに書くとすべてに適用される可能性があるので気を付けてください。
# vi /etc/httpd/conf.d/virtualhost.conf
●変更前
<VirtualHost *:80>
ServerName {{ 任意のサーバー名 }}:80
DocumentRoot /var/www/html
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^/(index\.php|img|js|fonts|css|robots\.txt|favicon\.ico|.well-known)
<Directory /var/www/html>
AuthType Digest
AuthName "Digest Auth"
AuthUserFile "/var/www/.htdigest"
Require valid-user
</Directory>
</VirtualHost>
●変更後
<VirtualHost *:80>
ServerName {{ 任意のサーバー名 }}:80
DocumentRoot /var/www/html
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^/(index\.php|img|js|fonts|css|robots\.txt|favicon\.ico|.well-known|health\.html) ★リダイレクトの設定がある場合のみ。ヘルスチェックで使用するファイル名を追記!(「.」の前に「\」が必要)
<Directory /var/www/html>
AuthType Digest ★認証方法(Basic認証ならBasic)
AuthName "Digest Auth" ★認証設定時に設定した認証名
AuthUserFile "/var/www/.htdigest" ★認証情報が記載されたファイルパス
Require valid-user
</Directory>
<Location /> ★下記(<location>~</location>)を追記!
AllowOverride all
Satisfy Any
SetEnvIf Request_URI "/health.html" healthcheck ★"ここはヘルスチェックで使用するファイル名"
Order Deny,Allow
Deny from all
Allow from env=healthcheck
AuthType Digest ★認証方法(Basic認証ならBasic)
require valid-user
AuthName "Digest Auth" ★認証設定時に設定した認証名
AuthUserFile "/var/www/.htdigest" ★認証情報が記載されたファイルパス
</Location>
</VirtualHost>
●文法確認
# httpd -t
●設定反映
# systemctl restart httpd
#はまったところ
リダイレクト設定が入っていることで、解消に時間がかかってしまいました。。。
⇒単に気が付くのが遅かっただけです。。。
下記の設定で、任意のファイル名を追記することでアクセス許可することができます。
アプリの仕様上、静的ファイルへのアクセスを制限するために下記設定を入れていたようです。。。。
RewriteCond $1 !^/(index\.php|img|js|fonts|css|robots\.txt|favicon\.ico|.well-known|health\.html)
リダイレクトについて、まだ全然わかっていないので、別の機会にまとめます。
#参考にしたURL