Nginx Basic認証設定

htpasswdファイルを使用してNginxのlocationにHTTP Basic認証を設定する方法を解説。パスワード作成や選択的な保護設定のステップバイステップガイド。

Security

詳細な説明

HTTP Basic認証は、Nginx設定の指定されたlocationにユーザー名とパスワードのプロンプトを追加します。ステージング環境、管理パネル、内部ツールへのアクセス制限を簡単に実現できます。

パスワードファイルの作成

apache2-utils パッケージの htpasswd ユーティリティを使用して、bcryptハッシュのパスワードファイルを作成します:

sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd admin

-c フラグは新規ファイルを作成します。既存ファイルにユーザーを追加する場合は省略してください。

Nginx設定

auth_basicauth_basic_user_file ディレクティブでlocationにBasic認証を適用します:

location /admin {
    auth_basic "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
    proxy_pass http://backend;
}

auth_basic の後の文字列はブラウザのログインダイアログに表示されるレルム名です。auth_basic off で入れ子のlocationブロックの認証を明示的に無効化できます。

サイト全体の保護

すべてのlocationを一度に保護するには、server ブロックに auth_basic ディレクティブを配置します。特定のパスの認証を選択的に無効化することもできます:

server {
    auth_basic "Staging Environment";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location /health {
        auth_basic off;
        return 200 "OK";
    }
}

このパターンは、サイト全体を保護しつつヘルスチェックエンドポイントは認証なしで応答させるステージング環境で一般的に使用されます。

IP制限との組み合わせ

より強力なセキュリティのため、satisfy ディレクティブを使用してBasic認証とIPベースのアクセス制御を組み合わせます:

location /admin {
    satisfy any;
    allow 192.168.1.0/24;
    deny all;
    auth_basic "Admin";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

satisfy any では、許可されたIP範囲からの接続はパスワードなしでアクセスでき、それ以外のネットワークからのユーザーは認証が必要です。satisfy all では両方の条件を満たす必要があります。

セキュリティ上の注意

Basic認証は資格情報をBase64エンコードされたテキストとして送信し、暗号化は一切ありません。ネットワーク盗聴による資格情報の傍受を防ぐため、必ずHTTPSと組み合わせて使用してください。機密データを扱う本番アプリケーションには、OAuth 2.0やJWTトークンなどのより堅牢な認証メカニズムの検討を推奨します。

ユースケース

ステージングや開発環境へのアクセスを迅速に制限し、資格情報を持つチームメンバーのみが公開前のサイトを閲覧できるようにします。

Try It — Nginx Config Generator

フルツールを開く