そらとぶへび

仕事・プライベートを通しての気づき、JavaやPHP、データベースやサーバの話などこつこつと書いていきます

ELB配下のEC2にBasic認証とヘルスチェックを設定する。

ELB配下のEC2とするためヘルスチェックを設定したい。しかしBasic認証をかけておきたい。
という場合の設定。
備忘のためメモしておきます。

Basic認証配下にヘルスチェック先があると、401エラーになってしまい正常なヘルスチェックができない。
その場合は、以下のようにApacheのConfを設定し、ヘルスチェック先のみベーシック認証対象から除外します。

ベーシック認証を設定。ただしヘルスチェック先を除外する。
# いずれかの条件を満たせばアクセス可
Satisfy Any

# ベーシック認証によりアクセスを許可
AuthUserfile /home/hogehoge/application/public/.htpasswd
AuthGroupfile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user

# リクエストURLがヘルスチェック先の場合は、アクセスを許可
setEnvIf Request_URI "/health_check/index.php" healthcheck
Order Deny,Allow
Deny from all
Allow from env=healthcheck
ヘルスチェックログの出力先を分ける

ヘルスチェックログとアプリログを混在しないように、以下の設定で出力先を分けます。

  DocumentRoot /home/hogehoge/application/public
  SetEnvIf User-Agent "ELB-HealthChecker.*" nolog
  SetEnvIf User-Agent "ELB-HealthChecker.*" elb
  ErrorLog /home/hogehoge/application/logs/error_log
  CustomLog /home/hogehoge/application/logs/access_log combined env=!nolog
  CustomLog /home/hogehoge/application/logs/health_check_access_log combined env=elb

ちなみに、ロードバランサー作成後にヘルスチェック先変更する場合は、ターゲットグループの方のタブから行うらしい。。