

nginxでBasic認証を設定する
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
nginxでBasic認証をかける手順のメモ。
htpasswdコマンドをインストールする
htpasswd はApacheのパッケージに含まれてるので、ディストリごとに入れるパッケージが違う。
Debian / Ubuntu系:
sudo apt-get install -y apache2-utilsRHEL / CentOS / Amazon Linux系:
sudo yum install -y httpd-toolshtpasswdファイルを作る
htpasswd コマンドがあるならそれを使うのが早い。
sudo htpasswd -c /path/to/htpasswd <username>-c は新規作成のオプションなので、2人目以降のユーザーを追加するときは外す。付けたままだとファイルが上書きされるらしい(未確認)。
htpasswd コマンドが無い環境なら openssl で代用できる。
echo "<username>:$(openssl passwd -apr1 パスワード)" | sudo tee /path/to/htpasswd > /dev/nullsudo echo ... > /path/to/htpasswd のように書くと、sudo が効くのは echo だけでリダイレクトは元の権限で実行されるため、書き込み先次第でPermission deniedになる。tee に渡す形にすればそこは回避できる。あと openssl passwd は平文パスワードが引数に残るので、シェルのhistoryに出したくない場合は対話式の方法を探した方がいい。
nginxの設定
server に直接書けば、その配下すべてに認証がかかる。
server { auth_basic "Auth"; auth_basic_user_file /path/to/htpasswd;}location単位で認証を分けたい場合
auth_basic / auth_basic_user_file は http / server / location / limit_except のどのコンテキストにも書ける。子コンテキストで何も指定しなければ、親の設定をそのまま継承する。
例えば server レベルで認証をかけた上で、特定の location だけ外したい場合は明示的に off にする必要がある。
server { auth_basic "Auth"; auth_basic_user_file /path/to/htpasswd;
location /public/ { auth_basic off; }}逆に「GET以外のメソッドだけ認証をかけたい」ような場合は、server レベルの auth_basic を切った上で limit_except 側に書く。
server { location /himitsu/ { limit_except GET { auth_basic "Auth"; auth_basic_user_file /path/to/htpasswd; } }}