今回は特定のページにアクセスするときに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認証の対象になってます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
server { . . . location /admin.php { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/password/.sample-site; # <= 認証パスワードファイルの場所を記載 if (!-f $document_root$fastcgi_script_name) { return 404; } fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location / { location ~* \.php(/|$) { if (!-f $document_root$fastcgi_script_name) { return 404; } fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } } . . . } |
解説
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/で実行)
1 2 3 4 |
$ sudo htpasswd -c .sample-site username New password: Re-type new password: Adding password for user username |
nginxを再起動させます。
1 |
$ sudo service nginx restart |
上記のように"/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を利用した「静的コンテンツ配信サーバ」「HTTPSサーバ」「Webアプリケーションサーバ」「大規模コンテンツ配信システム」の構築方法をそれぞれ詳しく紹介しています。後半ではnginxサーバのモニタリングやログの収集、そして軽量スクリプト言語Luaでnginxを拡張する方法について解説しているので、nginxをこれから使う方はもちろん、さらに活用したい方にもお勧めです。