nginxのBASIC認証


nginxサーバを立ててBASIC認証を行う

実行環境

(GCPのVM上で行いました)
ubuntu: 18.04
nginx: 1.19.1

実装

以前とnginxのデフォルトのconfファイルが変更されている模様。
どの記事を真似しても上手くいかず、手間取ってしまったので記しておく。

nginxのインストール

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install nginx

認証用usernameとpasswordの設定

.htpasswdファイルを/etc/nginx/以下に配置。(通常はここ)

二行目は、htpasswdコマンドを使うためにパッケージのインストール
そして、登録したいusernameとpasswordを設定する。

$ sudo touch /etc/nginx/.htpasswd
$ sudo apt-get install apache2-utils
$ sudo htpasswd -c -b /etc/nginx/.htpasswd [USERNAME] [PASSWORD]

ちなみに、htpasswdコマンドでは、-cで新しく.htpasswdファイルを生成するので、2回目以降にユーザを追加する際には外す。

confファイル

/etc/nginx/conf.d以下の*.confがincludeされる設定になっているはずなので、拡張子の前の名前はなんでも良い。
ここではhoge.confとしておく。
- 80番ポートで接続を待ち受ける
- rootで指定したディレクトリ以下のページを表示
- 表示したいhtmlファイルは、indexラベルを貼って登録しておく(←個人的忘却ポイント)
- location /以下のauth_basicは認証のダイアログの設定
- auth_basic_user_fileでは認証情報の設定ファイルを指定。

/etc/nginx/conf.d$ cat hoge.conf 
server {
    listen       80 default_server;
    server_name  0.0.0.0;
    root         /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    location / {
            auth_basic "Please Login";
            auth_basic_user_file /etc/nginx/.htpasswd; 
    }
}

confファイルの確認

以下のコマンドで、confファイルの文法の確認をする。
下の二行のような表示が出ればOK:)

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

読み込み

今行った設定を読み込ませて表示させる。

$ sudo nginx -s reload

上手くいかない場合は、

/etc/nginx/nginx.conf から、 /etc/nginx/sites-enabled/ をincludeする設定を消すことを試してみて欲しい。

今度はログイン試行の回数制限なんかも設けてみようと思います。
パスワードリストにあるパスワードは登録できないようにしたりしてみたい