fukasawah.github.io

Basic Authentication on Nginx

Apache Httpdのツールとして提供されているhtpasswdコマンドを使うのが良い。 (最初はpythonで自前で計算しようとしたが、思っていた以上に面倒だったので諦めた…)

yum install httpd-tools

htpasswdの利用法は以下のドキュメント。

https://httpd.apache.org/docs/2.4/misc/password_encryptions.html

こんな感じに作る。新規作成時は-cをつける

$ sudo htpasswd -c -m /etc/nginx/.htpasswd testuser
New password:
Re-type new password:
Adding password for user testuser

ただ、出来上がるファイルは誰でも読める状態になっており、nginxユーザ(グループ)から読める必要があるため、644から640に変え、グループをnginxに変更する。

sudo chmod 0640 /etc/nginx/.htpasswd
sudo chown :nginx /etc/nginx/.htpasswd

最後にnginx.confの設定を変える。設定のドキュメントは以下。

https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html

以下をhttp,server,locationのいずれかのディレクティブに追加する。 locationなら特定のpathなら認証不要といった事ができる。

    auth_basic           "need authenticate";
    auth_basic_user_file /etc/nginx/.htpasswd;

後はnginxをreloadして反映。