NginxでBasic認証の設定する方法

本記事ではNginxでBasic認証を行う手順を解説する。

目次

前提条件

本記事では以下の環境を前提としている。

Linux 環境
OSDebian GNU/Linux 12 (bookworm)
ミドルウェアnginx(1.25.5)

Basic認証

NginxでBasic認証を設定するためには、認証用のパスワードファイルを作成し、Nginxの設定ファイルに認証の設定を追加する。

以下に、具体的な手順を示す。

1. htpasswdコマンドのインストール

以下のコマンドを使ってインストールを行う。

# sudo apt-get update
# sudo apt-get install apache2-utils

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

ユーザー名とパスワードを保存するためのファイル(.htpasswdファイル)を作成する。

以下のコマンドは、ユーザー名user1とパスワードを設定する。-cオプションは新しいファイルを作成する。追加のユーザーを作成する場合は、このオプションを省略する。

# sudo htpasswd -c /etc/nginx/.htpasswd user1
New password:
Re-type new password:
Adding password for user user1

「New password:」と「Re-type new password:」が表示された後、2度パスワードの入力を求められるので、設定したいパスワードを2度入力。

.htpasswdファイルの作成が完了したら、念のために作成したファイルを確認しておく。

# cat /etc/nginx/.htpasswd
user1:$apr1$skF4gjcm$2HA/40Pg0Qov3.MKHumCw.

無事設定が完了していると、このようにユーザ名と暗号化されたパスワードが記述されていることが確認できる。

3. Nginxの設定ファイルの編集

次にNginxの設定ファイルにBasic認証の設定を追加する。Nginxの設定ファイルは通常/etc/nginx/nginx.conf。

以下はルートディレクトリにBasic認証を設定する例。

server {
    listen 80;
    server_name 57.180.13.226;

    location / {
        auth_basic "Restricted Area";
        auth_basic_user_file /etc/nginx/.htpasswd;

        root /usr/share/nginx/html;
        index index.html index.htm;
    }

}

/secure配下に対してBasic認証を実施したい場合は「location /secure」にBasic認証の設定をする。下記コードでの「/」を「/secure」に変更する。

server {
    listen 80;
    server_name 57.180.13.226;

    location /secure {
        auth_basic "Restricted Area";
        auth_basic_user_file /etc/nginx/.htpasswd;

        root /usr/share/nginx/html;
        index index.html index.htm;
    }

}

auth_basic “Restricted Area”;: Basic認証を有効にし、認証プロンプトに表示されるメッセージを設定。

auth_basic_user_file /etc/nginx/.htpasswd;: 認証に使用するパスワードファイルを指定。

4. Nginxの設定テストとリロード

設定が正しいかどうかをテストする。

# sudo nginx -t

問題がなければ以下のように出力される。

nginx: the configuration file /opt/bitnami/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/bitnami/nginx/conf/nginx.conf test is successful

Nginxをリロード。

# sudo systemctl reload nginx

5. 動作確認

Webブラウザからhttp://57.180.13.226にアクセスする。

「ユーザー名」に、パスワード設定時に入力したユーザー名

「パスワード」に、パスワード設定時に入力したパスワード

を入力し、「サインイン」をクリック。

Basic認証成功時のaccess.logの結果は以下。

116.94.208.233 - user1 [19/Aug/2024:05:06:52 +0000] "GET / HTTP/1.1" 200 108 "-" 
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0" "-"

“GET / HTTP/1.1” 200 108 でステータスコードが200(OK)となっている。

Basic認証失敗時のaccess.logの結果は以下。

116.94.208.233 - user1 [19/Aug/2024:05:14:26 +0000] "GET / HTTP/1.1" 401 581 "-" 
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0" "-"

“GET / HTTP/1.1” 401 581 でステータスコードが401(Unauthorized)で認証に失敗したことを表している。

  • システム開発、アプリ開発
  • マッチングアプリ開発
  • インフラ構築支援等、なんでもご相談ください。
よかったらシェアしてね!
  • URLをコピーしました!
目次