Nginxで特定のページをBasic認証にする

今回は特定のページにアクセスするときにbasic認証を適用する手順を紹介します。

 

作業環境

 

OS Ubuntu 18.04.3 LTS
nginx -v 1.14.0 (Ubuntu)
phpfpm -v PHP 7.3.9 (fpm-fcgi) (built: Sep 17 2019 09:26:12)

ソースコード(GitHub)

今回のソースはこちら(https://github.com/smithshiro/nginx-neko-neko)でも確認できます。

 

今回作るもの

 

認証用ダイアログ

認証後画面

 

Nginxの設定

location /admin.php” のディレクティブがBasic認証の対象になってます。

 

解説

auth_basic_user_fileディレクティブで認証

“location /admin.php” ディレクティブに入るとauth_basic_user_fileディレクティブが適用されます。

auth_basic_user_fileディレクティブ

構文 location ファイルパス
コンテキスト http, server, location, limit_except
意味 Basic認証のユーザ名とパスワードを記述したファイルを指定する

auth_basic_user_fileディレクティブで指定したパスにパスワードファイルを生成します。

 

パスワードファイル生成コマンド(/etc/nginx/password/で実行)

 

nginxを再起動させます。

 

上記のように”/admin.php”でアクセスするときにダイアログが表示されたら成功です。

“location /”よりも”location /admin.php”の方が優先されて適用される理由。

locationディレクティブの優先順位は

 

修飾子 説明
= 完全一致
~ 正規表現(大文字小文字区別)
~* 正規表現(大文字小文字区別しない)
指定なし 前方一致
^~ 前方一致(マッチしたらそれ以降のlocationディレクティブは評価されない)

となっています。

また、同じ優先度の修飾子の場合は、より厳密に条件にマッチするほうが優先されます。

上の設定の場合、”/admin.php”でアクセスすると、”location /”よりも”location /admin.php”の方が厳密にマッチしているので、”location /admin.php”のディレクティブが適用されます。

まとめ

  • auth_basic_user_fileディレクティブで認証ファイルパスを指定して、そのディレクティブないではBasic認証が適用される。
  • 認証ファイルは”htpasswd”コマンドで生成できる
  • locationディレクティブには修飾子ごとに優先順位があり、同じ優先度の修飾子の場合にはより厳密にマッチするが優先される。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です