Apache
AWS
elb
Digest認証
healthcheck

ダイジェスト認証時のELBヘルスチェックではまった。。。ELBのヘルスチェックを認証から外す。

More than 1 year has passed since last update.

はじめに

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