Nginx

【Nginx】ロードバランサーのヘルスチェックでBASIC認証を回避する

nginx-healthcheck
o_wani

Nginxで基本認証を設定している場合、ALB(Application Load Balancer)などのヘルスチェックリクエストに対してはでBASIC認証を回避する必要があります。

ヘルスチェックが401エラーで失敗していましたので、今回は、ALBのヘルスチェックリクエストを認証から除外する方法を解説します。

設定ファイルの修正:/etc/nginx/nginx.conf

修正前(現在の設定)

NginxでBASIC認証を設定するには通常は以下のように設定していたとします。

http {
    ....
    server {
        ....
        auth_basic "basic authentication";
        auth_basic_user_file "/etc/nginx/.htpasswd";
        ....
   }
....
}

修正後

Nginxのmapディレクティブを使用して、特定のユーザーエージェントに対してBASIC認証を無効にする方法を紹介します。

手順1: mapディレクティブの設定

まず、mapディレクティブを使用して、特定のユーザーエージェント(例:ELB-HealthChecker)に対してBASIC認証を無効にします。この設定はhttpブロック内に追加します。

http {
    ...
    map $http_user_agent $auth_basic {
        default "basic authentication";
        "ELB-HealthChecker" "";
    }
    ...
}

この設定により、デフォルトでは認証が有効になりますが、ユーザーエージェントがELB-HealthCheckerの場合は無効になります。

手順2: serverブロック内での設定

次に、serverブロック内でauth_basicディレクティブを使用して、認証を設定します。

http {
    ....
    server {
        ....
        auth_basic "basic authentication";
        auth_basic_user_file "/etc/nginx/.htpasswd";
        ....
        location = /health_check {
            # ヘルスチェック用のレスポンス
            return 200 "OK";
        }
   }
....
}

この設定では、auth_basicディレクティブに先ほどのmap変数を使用しています。これにより、通常のリクエストには認証が適用され、ヘルスチェックリクエストには適用されません。

以上2つの手順を反映し、保存します。

設定の反映

設定ファイルを編集した後、Nginxをリロードして変更を反映させます。

$ sudo nginx -s reload

Nginxのmapディレクティブを使用することで、特定の条件に基づいてBASIC認証を有効または無効にすることができます。この方法を使用することで、ALBのヘルスチェックリクエストに対して認証を回避し、正常にヘルスチェックが行えるようになります。

STAFF
o_wani
o_wani
スタッフ
大学卒業後、15年間WEB業界で働く。現在はマネジメントに従事していますが、ChatGPTの登場に触発され、このブログを再開。AIをパートナーに、自分で手を動かして実装する楽しさと喜びを再発見中。時代が変わりつつある中でも、陳腐化しない情報発信も目指しています。
記事URLをコピーしました