本記事ではNginxでBasic認証を行う手順を解説する。
前提条件
本記事では以下の環境を前提としている。
Linux 環境 | |
OS | Debian 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)で認証に失敗したことを表している。
- Nginxのログフォーマット設定と出力ログの見方を解説
- Nginxを再起動前にコマンドで文法チェックや設定誤りを確認をする方法
- [Nginx]オレオレCA認証局でSSL通信をする手順。サーバ証明書・秘密鍵・証明書署名要求の作成方法
- [Nginx]オレオレCA認証局を利用したクライアント証明書通信をする手順
- Nginxのログ一覧・ログ設定・ログ出力先の確認・設定方法を解説
- NginxでBasic認証の設定する方法
- Nginxの設定ファイル(.conf)の書き方と設定方法
- Nginxでリバースプロキシの構築・設定方法
- NginxでSSL設定してHTTPS通信をする手順
- NginxのVirtualhostを使って1つのサーバーでサブドメインを公開する手順
- [Nginx] サブディレクトリのアクセスを異なるWebサーバーにアクセスを振り分ける方法