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 htpasswdroot@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 falkossecretfalkossecretをユーザー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 リンク
- Nginx: http://nginx.org/
- Nginx Wiki: http://wiki.nginx.org/
- htpasswd.py Pythonスクリプト: http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py
著者について
ファルコ・ティメは、Timme Hosting(超高速Nginxウェブホスティング)のオーナーです。彼はHowtoForgeのリードメンテイナー(2005年から)であり、ISPConfigのコア開発者の一人(2000年から)です。また、O’Reillyの「Linux System Administration」書籍にも貢献しています。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。