[最終更新] 2016年12月5日
nginxでBasic認証を行います。ユーザー名とパスワードを入力させるアレです。パスワードファイルを作成し、nginxの設定ファイルでパスワードファイルの場所を指定します。
Basic認証について
Basic認証は、パスワード認証の一つです。ページにアクセスするとユーザー名とパスワードを求めるダイアログを表示させることができます。手順が簡単で、ほとんどすべてのブラウザで対応していることから、広く使われています。特にテストページの公開などでは役立つのではないでしょうか。
手順としては、ユーザー名と(暗号化した)パスワードを記述したパスワードファイルを作成し、nginxの設定ファイルでパスワードファイルを指定するだけです。とてもお手軽。内部的には、ngx_http_auth_basic_moduleを利用します。
パスワードファイルの作成
パスワードファイルの作成については、Apache互換の方法と、opensslコマンドを使った方法の2種類あります。前者はつまりhtpasswdコマンドを利用したものですが、nginxでApacheのツールを使うのも筋悪ですし、ここでは後者の方法を採用します。
まず、パスワードファイルの書式は以下です。
username:password
username:password:comment
コメントは必須ではありません。また、passwordは暗号化した文字列です(平文も可ですが当然非推奨)。暗号化した文字列の生成には、opensslコマンドを用います。たとえば、パスワードを1234とした場合(言うまでもなくこのパスワードは最低です)、コマンドは以下です。
openssl passwd 1234
この場合、パスワード1234がcrypt()により暗号化されます。デフォルトではcryptです。が、「NginxでBasic認証させる件 – Qiita」の記事によると、暗号化はcryptよりもMD5ベースのものがよいとされ、その場合は-apr1をオプションとして付記します。
実際、標準のcryptではパスワードが8文字以下しか使えないようで、8文字以上のパスワードを入力しても、以下の警告文が出て切り詰められてしまいます(参考「[.htpasswd] Basic認証パスワードを確認する方法と文字数制限の巻 – TrippyBoyの愉快な日々」)。
Warning: truncating password to 8 characters
これはちょっと危ないので、先の記事にならい-apr1オプションを使うことにします。
さて、パスワードファイルはどこに置いてもよいのですが、ここでは仮に/etc/nginx/hogehogeとします。hogeユーザーのパスワード1234を、パスワードファイルhogehogeに記述するには、以下のコマンドを実行します。
echo "hoge:$(openssl passwd -apr1 1234)" | sudo tee -a /etc/nginx/hogehoge
hoge,1234,etc/nginx/hogehoge の各部分は適宜変更。teeコマンドは、パイプできた文字列を標準出力とファイルの両方に出力に出力するコマンドです。T分岐のイメージですね。-aは追記を意味します。もちろん、viなどで/etc/nginx/hogehogeを直接編集してもよいです。これで、パスワードファイルの作成は完了です。
このままだと履歴にパスワードが残って嫌な感じなので、私は~/.bash_historyより当該の履歴を削除します。
設定ファイル
次に、作成したパスワードファイルを、nginxが読み込むように設定します。/etc/nginx/nginx.confあるいは、includeした設定ファイルの、http、server、location、limit_exceptコンテキスト内に、auth_basicおよびauth_basic_user_fileディレクティブを記述します。
具体的に、www.example.comサーバー用の設定ファイル、/etc/nginx/conf.d/www.example.com.conf があると仮定すると、以下の様な記述になります。
server {
listen 80;
listen [::]:80;
server_name www.example.com;
index index.html index.php;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# たとえば以下のように記述します
auth_basic "password_site";
auth_basic_user_file /etc/nginx/hogehoge;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
認証をかけたい場所によって、auth_basicおよびauth_basic_user_fileディレクティブの記述する場所を適宜変更します。
ここまで終わったら、nginxで設定ファイルを再読み込みします。CentOS 7においては、systemdを使います。
sudo systemctl reload nginx.service
以上。
参考
書籍「nginx実践入門」を参考にしました。本書は、技術評論社のサイトから電子版を買うことも出来ます。一通りのことがわかりやすくまとまっている本です。
関連記事
Linux の記事
- [2017年1月23日] 我が母、UbuntuがWindowsじゃないことに一ヶ月経って気づく!
- [2016年12月8日] 還暦の母がLinuxマシンを使い始める
- [2016年12月6日] CentOS 7でSSHのログをpostfix + Gmailで送るまで
- [2016年12月5日] CentOS 7 + nginx + munin導入
- [2016年10月30日] ページ速度改善のためnginxで圧縮を有効にする(WordPressでも有効)
- ---本記事---
- [2016年7月31日] 不正アクセス(SSH)の試行を遮断(CentOS 7, ConoHa)
- [2016年7月21日] nginxの設定ファイル nginx.conf の読み方 超入門
- [2015年8月31日] Ubuntu 15.04 で2TB超え(3TB)のHDをマウントする(CUI)
- [2013年5月26日] MiniDLNAをufwで許可する(Ubuntu Server 12.04)
- [2013年4月22日] USB温度センサーで室温をモニタリングしてみた(on Ubuntu Server 12.04)
スポンサーリンク