DELOGs
[サーバ構築編#8] NginxでBasic認証を設定

サーバ構築編#8
NginxでBasic認証を設定

NginxでBasic認証を設定できるように、apache2-utilsをインストールしてhtpasswdコマンドを利用可能に

初回公開日

最終更新日

サーバ構築編第8回は、NginxでBasic認証を利用可能にします。 サイト構築中は、保護できるようにします。 Nginx単体には htpasswd を作成する機能がないので、apache2-utils をインストールして htpasswd コマンドを使えるようにします。

1.apache2-utils をインストール

apache2-utilsは、Apacheに関連する便利なツールが含まれたパッケージです。ただ、Nginxで利用するのはhtpasswdだけになると思います。
bash
1sudo apt update 2sudo apt install apache2-utils -y
これで htpasswd コマンドが使えるようになります。

2.認証用の .htpasswd ファイルを作成

初回

adminというユーザ名で/etc/nginx/.htpasswd に登録を行います。
bash
1sudo htpasswd -c /etc/nginx/.htpasswd admin
パスワードを2回入力して設定
bash
1New password: 2Re-type new password:
  • /etc/nginx/.htpasswd に admin の認証情報が保存されます
  • -c オプションは最初にユーザを作成する時だけ(.htpasswdを新規作成する)。ユーザを追加する時に-cをつけると登録済みのユーザが消えてしまうので注意

追加ユーザーを登録(運用時はこれ!)

bash
1sudo htpasswd /etc/nginx/.htpasswd user2
  • user2 を追加(-c は不要!)

3.Nginx の設定に Basic 認証を追加

Nginxでは.htaccess は使えないため、nginx.confconf.d/*.conf に直接、Basic認証の設定を書く必要があります。
Nginxが .htaccessをサポートしない理由
  • Nginx は .htaccess のような動的設定を嫌う!
  • .htaccess を使うと、ディレクトリごとに設定を解析するため、パフォーマンスが低下する!
  • そのため、すべての設定を .conf に記述し、一括ロードするのが Nginx の設計方針!
というわけで、confファイルへBasic認証の設定を追記します。
bash
1sudo vi /etc/nginx/conf.d/example.com.conf

サイト全体に認証をかける場合

bash
1server { 2 server_name example.com; 3 4# Basic認証 5 auth_basic "Restricted Area"; # <-認証プロンプトのタイトル 6 auth_basic_user_file /etc/nginx/.htpasswd; # <-認証ファイルのパス 7## 8 9 root /var/www/example.com/html; 10 index index.html; 11 12 location / { 13 try_files $uri $uri/ =404; 14 } 15 16 listen 443 ssl; # managed by Certbot 17 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot 18 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot 19 include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot 20 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot 21 22}

特定のディレクトリだけに認証をかける場合

bash
1server { 2 server_name example.com; 3 4 root /var/www/example.com/html; 5 index index.html; 6 7 location / { 8 try_files $uri $uri/ =404; 9 } 10 11 # /test 配下を Basic 認証 12 location /test { 13 auth_basic "Restricted Area"; # 認証プロンプトのメッセージ 14 auth_basic_user_file /etc/nginx/.htpasswd; 15 } 16 17 listen 443 ssl; # managed by Certbot 18 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot 19 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot 20 include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot 21 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot 22 23}
毎度、認証設定をconfファイルに追加しないといけないのは、少し不便ですが、慣れていくしかさなそうです。

4. Nginx の設定をチェック & 再起動

Nginxの構文チェックを行なって、再起動を実施します。
bash
1sudo nginx -t
bash
1sudo systemctl restart nginx

5. まとめ

  • htpasswd で /etc/nginx/.htpasswd を作成し、ユーザーを登録!
  • auth_basic を Nginx の location /admin に設定して、Basic 認証を適用!
  • nginx -t で設定チェック&systemctl restart nginx で適用!
  • ブラウザでアクセスし、Basic 認証が動作することを確認!
続きはこちら...
前回の確認はこちら...
この記事の執筆・編集担当
DE

松本 孝太郎

DELOGs編集部/中年新米プログラマー

ここ数年はReact&MUIのフロントエンドエンジニアって感じでしたが、Next.jsを学んで少しずつできることが広がりつつあります。その実践記録をできるだけ共有していければと思っています。