Nginx

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ディレクティブには修飾子ごとに優先順位があり、同じ優先度の修飾子の場合にはより厳密にマッチするが優先される。
nginx実践入門
nginxを現場で活用するための知識を、実践的なノウハウを交えて解説した書籍です。
nginxのインストール方法や基本的な設定方法からはじめ、nginxを利用した「静的コンテンツ配信サーバ」「HTTPSサーバ」「Webアプリケーションサーバ」「大規模コンテンツ配信システム」の構築方法をそれぞれ詳しく紹介しています。後半ではnginxサーバのモニタリングやログの収集、そして軽量スクリプト言語Luaでnginxを拡張する方法について解説しているので、nginxをこれから使う方はもちろん、さらに活用したい方にもお勧めです。

-Nginx
-

© 2021 Shiro's secret base