TL;DR
Dockerのhttpd
イメージを利用してhtpasswd
コマンドを実行し、得られた行をコピペしましょう
やり方詳細
Basic認証をするには、.htpasswd
ファイルを作成する必要があります。しかし、Nginxにはそのためのツールがついてきません。
かといって、そのためだけにApacheやそれ由来のツールをインストールするのは癪ですし、
一時的に特定のツールが使いたいということなので、Dockerの出番です。Apacheのイメージ、httpd
を利用します。これにはhtpasswd
コマンドがついてきます。次のようなコマンドで起動します。--rm
をつけることで、セッションを閉じるとコンテナが破棄されるようになります。
docker run -it --rm httpd bash
セッションが起動したら、お待ちかねhtpasswd
コマンドを実行します。コマンド1回毎に生成されるのは1行なので、-n
オプションをつけて標準出力に吐かせます。下のコマンドのどちらかを実行します。違いはパスワードを後から入力するか、引数として最初から渡すかの違いです。
htpasswd -n <ユーザ名>
htpasswd -nb <ユーザ名> <パスワード>
<ユーザ名>:<ハッシュ値>
のような行が出るのでコピーし、テキストエディタに貼り付けて保存します。Nginxでは.htpasswd
以外の名前でも構いません。
また、最後の空行は無視して構いません。複数ユーザの認証を行う際には、
<ユーザ名1>:<ハッシュ値>
<ユーザ名2>:<ハッシュ値>
<ユーザ名3>:<ハッシュ値>
のように並べます。少なくともUbuntu 18.04付属のNginxでは強固なBCrypt(-B
オプション)が使用不可なので注意してください。
後はnginx.conf
や各サイトの設定ファイルのlocation
節内に以下の2行
auth_basic "<Basic認証時のメッセージ>"
auth_basic_user_file "<.htpasswdファイルのパス>"
を追加します。Nginxのリロード(nginx -s reload
or systemctl reload nginx
)もお忘れなく。