レザボア・コンサルティングの中西です。
Webサイトやアプリケーションに簡易的なアクセス制限を設けたい場合、Basic認証は手軽な選択肢の一つです。
今回は、Ubuntu 環境下でサイトやシステムを運用する際の、nginx を用いた Basic認証の掛け方をご紹介します。
前提条件
- Ubuntu 20.04 以降
- nginx がインストール済みで稼働中
- 認証を設定したい server ブロックまたは location ブロックが明確であること
※ また、本構成は HTTPS(SSL/TLS)環境下での運用を前提としています
パッケージのインストール
nginx で Basic認証を行うには、パスワードファイルを生成するために apache2-utils
パッケージが必要です。
以下のコマンドでインストールします。
sudo apt update
sudo apt install apache2-utils -y
認証用パスワードファイルの作成
ユーザー名 admin(必要に応じてご変更ください)、パスワードを指定して .htpasswd
ファイルを作成します。
sudo htpasswd -c /etc/nginx/.htpasswd admin
パスワードはコマンド実行後に入力を求められます。
※1 -c
オプションはファイルを新規作成する際に使用します。複数ユーザーを追加する場合は2回目以降は -c
を除いてください。
※2 nginx のパスは /usr/local/nginx/conf/
など、環境やインストール設定によって異なる場合があります。適切に置き換えてください。
補足
このままでも動作上は問題ありませんが、nginx 設定ファイルと同階層にあると誤って公開対象になるリスクがあります。
/etc/nginx/secure/.htpasswd
など、アクセス制御を前提とした専用ディレクトリを作成し、所有者やパーミッションも明示する方が実践的です。
以下の設定は一例です。
sudo mkdir /etc/nginx/secure
sudo chown root:root /etc/nginx/secure
sudo chmod 700 /etc/nginx/secure
sudo htpasswd -c /etc/nginx/secure/.htpasswd admin
nginx の設定ファイルを編集
対象の server または location ブロックに以下の2行を追加します。
この例では /auth/ パスへのアクセスに認証を要求します。
location /auth/ {
auth_basic "Restricted Contents";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:8000; # 任意のバックエンド
}
auth_basic には認証ダイアログに表示されるメッセージを、auth_basic_user_file にはパスワードファイルのパスを指定します。
nginx 設定の検証と再起動
設定ファイルの構文チェックを行い、問題なければnginxを再起動します。
sudo nginx -t
sudo systemctl reload nginx
これで、サイトにアクセスすれば Basic 認証が適用されていると思います。
備考
Basic認証はHTTP通信では認証情報が平文で送信されます。
必ずSSL/TLS(HTTPS)を併用してください。
そうしないと、ネットワーク上で認証情報が傍受される可能性があります。
おわりに
システムを構築する際は Ubuntu 等の Linux 環境が採用されることが多いと思います。
Basic認証は設定が簡単でありながら、シンプルなアクセス制限を実現できる便利な機能ですが、セキュリティ面での制約を理解し、必ずHTTPSと組み合わせて使用するようにしましょう。