0
0

Nginxで.htpasswdで認証設定をしてみました

Posted at
  • 私は韓国人として、日本語の勉強とコンピュータの勉強を同時に行うために、ここに文章を書きます
  • 翻訳機の助けを借りて書かれた文章なので、誤りがあるかもしれません

はじめに

現在のプロジェクトで簡単なモニタリングツールとしてNetdataを導入することに決定しましたが、ポート19999が外部に公開される問題がありました。これを解決するために、.htpasswdファイルを使用してNginxを介してNetdataへのアクセスを制限する方法を適用しました。この方法で、認証されたユーザーのみがNetdataダッシュボードにアクセスできるように設定しました。

image.png


導入方法

apache2-utilsパッケージのインストール

sudo apt update
sudo apt install apache2-utils

まず、Netdataダッシュボードへのアクセスを制限するために.htpasswdファイルを作成する必要があります。そのためには、apache2-utilsパッケージをインストールする必要があります。

htpasswdの使用方法

htpasswd -c .htpasswd {id}

任意の場所に任意の名前でhtpasswdコマンドを使用してファイルを作成します。

htpasswdコマンドの参考
Apacheドキュメント

htpasswdとは
image.png

  • htpasswdは、HTTPユーザーの基本認証のために、ユーザー名とパスワードを保存するプレーンテキストファイルを作成および更新するツールです
  • パスワードはbcrypt、MD5、SHA-1、またはシステムのcrypt()関数を使用して暗号化されます。このツールは、プレーンテキストファイルでのみユーザー名とパスワードを管理し、ファイルにアクセスできない場合はエラーを返します
cat .htpasswd
{id}:$apr1$6z/mxy4D$LIQF3E6UluYUZunNnMQd00
  • 次のような形式で保存されます

Nginx設定を通じて認証を適用

image.png

 nginx:
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - certbot_conf:/etc/letsencrypt
      - certbot_www:/var/www/certbot
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
+     - ./.htpasswd:/etc/nginx/.htpasswd:ro
    environment:
      - TZ=Asia/Seoul
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
    networks:
      - hubo-network

現在、.htpasswdファイルを生成したパスに合わせて、Docker Composeファイルでそのファイルをnginxコンテナにマッピングするために、コンテナ内部の/etc/nginx/.htpasswdパスに読み取り専用でマッピングされるように設定しました。

	location /netdata/ {
    		auth_basic "Administrator's Area";
    		auth_basic_user_file /etc/nginx/.htpasswd;
    		proxy_pass http://hubo-netdata:19999/;
    		proxy_set_header Host $host;
    		proxy_set_header X-Forwarded-Host $host;
    		proxy_set_header X-Forwarded-Server $host;
    		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    		proxy_http_version 1.1;
    		proxy_pass_request_headers on;
    		proxy_set_header Connection "keep-alive";
 	   	proxy_store off;
	}

Nginx設定ファイルを通じてNetdataダッシュボードへのアクセスを保護するために基本認証を追加し、/netdata/パスへのリクエストをNetdataサービスにプロキシして転送するようにしました。

適用

docker compose up -d --no-deps --force-recreate nginx

適用のためにコンテナを再作成しました。

なぜdocker restartコマンドを使用しないのですか?
docker restartは既存のコンテナを停止して再起動するだけなので、コンテナの設定やファイルシステムに対する変更が適用されません。

コンテナが起動したら、正しくマッピングされているか確認します。

docker exec -it hubo-nginx-1 sh -c "cat /etc/nginx/.htpasswd"
{id}:$apr1$6z/mxy4D$LIQF3E6UluYUZunNnMQd00

次のようにコンテナ内にコピーされた/etc/nginx/.htpasswdを開いて、IDとパスワード(暗号化されたもの)を確認できれば成功です。

確認

image.png

success

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0