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

Nginxによる基本的なHTTP認証

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

私はこれがあなたにとって機能するという保証はしません!

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 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/10791/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設定に追加するだけです。server {}コンテナ内に追加します。

vi /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を再読み込みします:

/etc/init.d/nginx reload

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

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

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

4 リンク

著者について

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

Share: X/Twitter LinkedIn

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

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