Nginxで異なるページで別々にベーシック認証
ベーシック認証なんだかんだ便利なので、仕事でも使ったりします。
ページごとにユーザー名とパスワードを変えることも簡単にできます。
使ったのはAmazonLinux、Nginxです。
ユーザー名とパスワードの入ったファイルを作る
htpasswdというコマンドを使うので、マシンにインストールします。
sudo yum install -y httpd-tools
次に
sudo htpasswd -c /etc/nginx/ファイル名 ユーザ名
ファイル名は.htpasswdが一般的ですが、ページごとにユーザーとパスワードを分ける場合は、ページ名と紐づく名前がいいですね。
.htpasswd_page1とか。
-cオプションのcは、createのcです。
すでにファイルがあった場合上書きしてしまうので、ユーザーを追加したいときは-cはつけてはいけないらしいです。
参考
nginxでBasic認証(ユーザを複数設定する)htpasswdの叩き方
次にパスワード入力が求められるので、好きなパスワードを入力。
確認用も入力したら、設定完了メッセージが出ると思います。
簡単ですね。
作られたファイル /etc/nginx/.htpasswd_page1を見てみると、
ユーザー名:ハッシュ化されたパスワード
が記されていると思います。
Nginxの設定
Nginxの設定です。
location /page1 {
auth_basic "Restricted";
auth_basic_user_file page1用の.htpasswdファイルのフルパス;
proxy_pass: http://127.0.0.1:8000;
}
を追加します。
auth_basicは認証名を設定してるらしいです。実際には、認証領域 (authentication realm) を設定してるとか。
うーん、よくわからない…。
参考
nginxでBasic認証を行うには?
auth_basic_user_fileには、先ほど作ったユーザーとパスワードの入ったファイル名のフルパスを指定します。
先ほどの例だと/etc/nginx/.htpasswd_page1ですね。
proxy_passは忘れがちですが、gunicornとかWSGI使ってるときはこれがないとPage not found 404が出ます。
参考
NginxでBasic認証かけて404エラーが出る
僕は8000番ポートでgunicornで流しているので、ローカルホストの:8000です。
別のページも同様の項目を追加すればベーシック認証の設定ができます。
で、
sudo service nginx restart
でnginxに設定を反映させれば出来上がり!
nginxで設定した locationのあとのパスは正規表現でも指定できるらしいのですごく汎用性ありますね。
便利です。