Nginx 認証 · 1 min read · Jan 23, 2026

Nginxによる基本HTTP認証

このチュートリアルでは、Nginxを使用してサーバー上のディレクトリやウェブサイト全体をパスワードで保護する方法を示します。これは、Apacheの基本HTTP認証に相当します。

1 前提条件

ここでは、www.example.comというウェブサイトを使用し、ドキュメントルートは/var/www/www.example.com/web/、Nginxのvhost設定ファイルは/etc/nginx/sites-enabled/www.example.com.vhostです。パスワードで保護したいディレクトリは/var/www/www.example.com/web/test/です。

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

ログインできるユーザーがパスワード(暗号化された形式)と共にリストされるパスワードファイルが必要です。このようなパスワードファイルを作成するには、Apacheのhtpasswdツールを使用するか、http://trac.edgewall.org/browser/trunk/contrib/htpasswd.pyのPythonスクリプトを使用します。

2.1 Apacheのhtpasswdコマンドを使用

Apacheのhtpasswdコマンドを使用したい場合は、システムに存在するか確認してください:

which htpasswd
root@server1:~# which htpasswd  
/usr/bin/htpasswd  
root@server1:~#

上記のような出力が得られれば、すべて問題ありません - htpasswdはすでにインストールされています。コマンドが出力なしで戻る場合、htpasswdはシステムに存在せず、インストールする必要があります。Debian/Ubuntuでは、apache2-utilsパッケージの一部であり、次のようにインストールできます:

apt-get -y install apache2-utils

今、パスワードファイル/var/www/www.example.com/.htpasswdを作成し、ユーザーfalkoを保存したいと思います(パスワードファイルには好きな名前を付けることができます - .htpasswdと名付ける必要はありません; Apacheではそのようにパスワードファイルが名付けられるため、私は.htpasswdと名付けました):

htpasswd -c /var/www/www.example.com/.htpasswd falko

ユーザーfalkoのパスワードを求められます。-cスイッチはファイルが最初から作成されることを意味します; 以前に存在しなかった場合は作成され、以前に存在していた場合は新しいもので上書きされ、古いファイルのすべてのユーザーが失われます!したがって、すべての既存のユーザーを削除せずに別のユーザーを追加したい場合は、-cスイッチなしでhtpasswdコマンドを使用してください:

htpasswd /var/www/www.example.com/.htpasswd till

最後のコマンドは、ユーザーtillを/var/www/www.example.com/.htpasswdに追加し、現在falkoとtillのユーザーが存在することになります。

2.2 htpasswd.py Pythonスクリプトを使用

Apacheのhtpasswdコマンドを使用したくない、または使用できない場合は、http://trac.edgewall.org/browser/trunk/contrib/htpasswd.pyのPythonスクリプトを使用できます。

これを/usr/local/binにダウンロードし、次のように実行可能にします:

cd /usr/local/bin  
wget http://trac.edgewall.org/export/14464/trunk/contrib/htpasswd.py  
chmod 755 /usr/local/bin/htpasswd.py

今、パスワードファイル/var/www/www.example.com/.htpasswdを作成し、ユーザーfalkoを保存したいと思います(パスワードファイルには好きな名前を付けることができます - .htpasswdと名付ける必要はありません; Apacheではそのようにパスワードファイルが名付けられるため、私は.htpasswdと名付けました):

htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret

falkossecretをユーザーfalkoのパスワードに置き換えてください。-cスイッチはファイルが最初から作成されることを意味します; 以前に存在しなかった場合は作成され、以前に存在していた場合は新しいもので上書きされ、古いファイルのすべてのユーザーが失われます!したがって、すべての既存のユーザーを削除せずに別のユーザーを追加したい場合は、-cスイッチなしでhtpasswd.pyコマンドを使用してください:

htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret

最後のコマンドは、ユーザーtillを/var/www/www.example.com/.htpasswdに追加し、現在falkoとtillのユーザーが存在することになります。

3 Nginxの設定

パスワードファイルが用意できたので、/etc/nginx/sites-enabled/www.example.com.vhostのNginx vhost設定に追加するだけです。サーバー{}コンテナ内に追加します。

nano /etc/nginx/sites-enabled/www.example.com.vhost

ドキュメントルート内のtestディレクトリをパスワードで保護したいので、ここではlocation /test {}を使用します(ウェブサイト全体をパスワードで保護するには、location / {}を使用します):

server {
       listen 80;
       server_name www.example.com example.com;
       root /var/www/www.example.com/web;
[...]  
       location /test {
                auth_basic "Restricted";
                auth_basic_user_file /var/www/www.example.com/.htpasswd;
       }
[...]  
}

その後、Nginxをリロードします:

service nginx reload

これで完了です!ブラウザでテストディレクトリ(http://www.example.com/test)にアクセスすると、ユーザー名とパスワードを求められます:

Nginx基本認証(.htpasswd)プロンプト

正しいユーザー名とパスワードを入力すると、アクセスが許可されます:

ログイン成功

そうでない場合は、401 Authorization Requiredエラーメッセージが表示されます:

Nginx 認証が必要

4 リンク

著者について

ファルコ・ティメは、Timme Hosting(超高速Nginxウェブホスティング)のオーナーです。彼はHowtoForgeのリードメンテイナー(2005年から)であり、ISPConfigのコア開発者の一人(2000年から)です。また、O’Reillyの書籍「Linuxシステム管理」にも貢献しています。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。