Nginx でBasic認証(ユーザ名、パスワードを求める )するには
以前に、「.htaccessでユーザとパスワードを求める(Basic認証)」でapache におけるBasic認証(ユーザ名、パスワードを求める )について簡単に解説しました。
今回は、そのBasic認証(ユーザ名、パスワードを求める )をnginxでの実現方法について、簡単に解説してみます。
- 目次
- 履歴
2011年6月21日 初版
2013年5月16日 暗号化の対応バージョン、パスワードファイル作成に関して追記
nginx でBasic認証(ユーザ名、パスワードを求める )するには
nginx でBasic認証(ユーザ名、パスワードを求める )するには、
apacheでは、.htaccessにて設定していた内容を、nginxでは、設定ファイル(/etc/nginx/nginx.conf)で行うだけです。
ここでは、簡単な Apacheでの設定例 を元に Nginxでの設定例 を解説してみます。
Apacheでの設定例
apacheでは、以下のような設定を行います。
(詳しくは、.htaccessでユーザとパスワードを求める(Basic認証) を参照してください。)
1
2
3
4
| AuthUserFile "/home/user/public_html/test/.htpasswd"
AuthName "Local Security Test"
AuthType BASIC
Require valid-user
|
これは、以下のような意味になります。
- 1行目:パスワードファイルを設定します。
- 2行目:認証名を設定します。
- 3行目:認証タイプを設定します。
- 4行目:認証後の規制種別を設定します。
Nginxでの設定例
先のApacheでの設定例を
nginxで実現するには、以下のように設定ファイル(/etc/nginx/nginx.conf)を編集します。
server {
server_name www.example.com;
...
location / {
auth_basic "Local Security Test";
auth_basic_user_file "/home/user/public_html/test/.htpasswd";
}
...
}
|
赤部分が、編集箇所でBasic認証(ユーザ名、パスワードを求める )を実施している箇所になります。
上記のapacheの設定と対比させてば、よく理解できると思います。
auth_basic
認証名を設定しています。実際には、認証領域 (authentication realm) を設定します。
auth_basic_user_file
パスワードファイルを設定します。
フルパスでない場合は、nginx.conf のあるディレクトリからの論理パスと判断します。
例)
auth_basic_user_file “.htpasswd”;
とした場合、→ /etc/nginx/.htpasswd を探しに行きます。
ここで指定したファイルの中身は、Apacheと同じです。以降の
パスワードファイルの作成方法 を参照してください。
設定ファイルは、これだけです。
apacheでの設定項目、AuthType, Require については、設定できません。
パスワードファイルの作成方法 (おまけ)
パスワードファイル( 先の例の .htpasswdファイル ) の作成方法を簡単に解説しておきます。
ファイルの中身は、以下のようになります。
ユーザ名:パスワード
|
このパスワード 部分がいろんな暗号化形式に対応しています。
ただ、基本的に Apacheと同じものを使用できるようになっていますので、htpasswd コマンドで作成することができます。
また、openssl コマンド でもパスワードの暗号化ができます。この2つのやり方を簡単に解説しています。
htpasswd コマンドは Apacheに同梱されているコマンドです。
Debian,Ubuntu では、apache2-utils をインストールする必要があります。
CentOS,ScientificLinux では、httpd-tools をインストールする必要があります。
htpasswd コマンド
$ htpasswd -nb p myName myPassword > .htpasswd
$ htpasswd -nb d myName myPassword > .htpasswd
$ htpasswd -nb m myName myPassword > .htpasswd
$ htpasswd -nb s myName myPassword > .htpasswd
|
openssl コマンド
$ printf " myName:myPassword\n" > .htpasswd
$ printf " myName:$(openssl passwd -crypt myPassword\n" > .htpasswd
$ printf " myName:$(openssl passwd -apr1 myPassword)\n" > .htpasswd
$ printf " myName:{SHA}$(printf "myPassword" | openssl dgst -binary -sha1 | base64)\n" > .htpasswd
$ (USERNAME=" myName";PWD="myPassword";SALT="$(openssl rand -base64 3)";SHA1=$(printf "$PWD$SALT" | \
openssl dgst -binary -sha1 | sed 's#$#'"$SALT"'#' | base64); \
printf "$USERNAME:{SSHA}$SHA1\n") > .htpasswd
$ printf " myName:$(openssl passwd -1 myPassword)\n" > .htpasswd
|
上記のコマンドイメージは、すべてファイルの上書きを行っています。
ユーザを増やしたい場合は、リダイレクトを変更すればOKです。
$ htpasswd -nbs myName2 myPassword2 >> .htpasswd
|
みたいに
>> を使えばOKです。
各暗号化は、対応したNginxのバージョンが異なるので注意が必要です。
以下に、各暗号化の対応バージョンを記載しておきます。
CRYPT , MD5
Nginx 初版 から 対応
apr1 , PLAIN , SSHA
Nginx 1.0.3 から 対応
SHA
Nginx 1.3.13 から 対応
このように
nginxでも同じようにBasic認証(ユーザ名、パスワードを求める )ができます。
ここではルートディレクトリ (
location / ) を指定しています。
一般的には、ルートディレクトリ とは、全く別のディレクトリを指定することが多いと思います。その場合、
aliasを使います。
server {
server_name www.example.com;
...
location /restricted/ {
alias /home/user/public_html/restricted/;
auth_basic "Local Security Test";
auth_basic_user_file "/home/user/public_html/test/.htpasswd";
}
...
}
|
こんな感じで設定すると
rootで指定されたディレクトリとは、全く別のディレクトリを利用することができます。
このあたりにも、
nginxが機能を絞っていることがわかりますね。Basic認証を使いたい方に参考になれば幸いです。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事 :
2012年7月13日, 11:21 PM
[…] 【参考URL】 apache のかわりにnginxを使ってみる(7) nginx でBasic認証(ユーザ名、パスワードを求める )するには | レンタルサーバー・自宅サーバー設定・構築のヒント http://sakura.off-soft.net/centos/apache-nginx-7-basic-auth.html […]