Difyウェブ公開時のベーシック認証設定ガイド

Difyウェブ公開時のベーシック認証設定ガイド Dify
この記事について: Difyをウェブに公開する際、デフォルトでは誰でもアクセスできる状態になっています。この記事では、Basic認証を設定してアクセス制限を行う方法を初心者向けに解説します。

はじめに:Basic認証とは?

Basic認証は、ウェブサイトにアクセスする際にユーザー名とパスワードの入力を求める最も基本的なアクセス制限方法です。Difyをインターネットに公開する際、不特定多数の人がアクセスできないように保護するために有効です。

メリット:
  • 設定が簡単
  • ほとんどのブラウザで対応
  • 追加のアプリケーションが不要

準備:始める前に

設定を始める前に、以下の点を確認しましょう:

  • サーバーへのSSHアクセス権限があること
  • Difyがdocker-composeで動作していること
  • 設定変更に備えてバックアップを取得すること
重要: 設定変更を行う前に、必ず現在の設定ファイルのバックアップを取得してください。万が一問題が発生した場合に元に戻せるようにします。

ステップ1:バックアップの取得

1バックアップ用フォルダの作成

まずは、現在の設定のバックアップを保存するためのフォルダを作成します。日付ごとに管理すると後で便利です。

mkdir -p backup_folder/$(date +%F)

2Nginx設定ファイルのバックアップ

Nginxの設定ファイルをバックアップします。

cp dify/docker/nginx/nginx.conf.template backup_folder/$(date +%F)/
cp dify/docker/nginx/conf.d/default.conf backup_folder/$(date +%F)/

3その他の重要ファイルのバックアップ

認証情報ファイルや環境変数ファイルなど、他の重要なファイルもバックアップしておきましょう。

# 認証情報ファイル(既に作成済みの場合)
if [ -f dify/docker/nginx/.htpasswd ]; then
  cp dify/docker/nginx/.htpasswd backup_folder/$(date +%F)/
fi

# Docker Composeファイル
cp dify/docker/docker-compose.yaml backup_folder/$(date +%F)/
cp dify/docker/docker-compose.override.yaml backup_folder/$(date +%F)/

# 環境変数ファイル
if [ -f dify/docker/.env ]; then
  cp dify/docker/.env backup_folder/$(date +%F)/
fi

# SSL証明書(利用している場合)
if [ -d dify/docker/nginx/ssl ]; then
  tar czf backup_folder/ssl-$(date +%F).tgz dify/docker/nginx/ssl
fi

ステップ2:Basic認証の設定

1htpasswdコマンドのインストール

パスワードファイルを作成するために必要なツールをインストールします。

sudo apt update
sudo apt install -y apache2-utils

2認証情報(.htpasswd)ファイルの作成

アクセスに必要なユーザー名とパスワードを設定します。以下のコマンドで、あなたのユーザー名あなたのパスワードの部分を自分の設定したいものに変更してください。

printf "あなたのユーザー名:$(openssl passwd -apr1 'あなたのパスワード')\n" > dify/docker/nginx/.htpasswd

例えば、ユーザー名を「admin」、パスワードを「secure123!」に設定する場合:

printf "admin:$(openssl passwd -apr1 'secure123!')\n" > dify/docker/nginx/.htpasswd
ヒント: 強力なパスワードを使用することをお勧めします。大文字・小文字・数字・特殊文字を組み合わせた12文字以上のパスワードが理想的です。
注意: 必ずご自身で設定したユーザー名とパスワードに変更してください。デフォルトやサンプルのまま使用すると、セキュリティ上のリスクになります。

ステップ3:Nginx設定ファイルの編集

1Nginx設定ファイルを編集

Nginxの設定ファイルにBasic認証の設定を追加します。お好みのテキストエディタを使用して以下のファイルを編集しましょう。

nano dify/docker/nginx/conf.d/default.conf

2認証設定を追加

ファイル内の location / { ... } ブロックを見つけて、その中に以下の2行を追加します:

location / {
    auth_basic           "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
    proxy_pass           http://dify_backend;
    proxy_set_header     Host $host;
    proxy_set_header     X-Real-IP $remote_addr;
    proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
}
説明:
  • auth_basic – ブラウザに表示される認証ダイアログのタイトルです。好きな文字列に変更できます。
  • auth_basic_user_file – パスワードファイルのパスです。この値は変更しないでください。

ステップ4:Docker Compose設定の更新

1Docker Compose設定ファイルを編集

認証ファイルをコンテナにマウントするために、docker-compose.yamlファイルを編集します。

nano dify/docker/docker-compose.yaml

2ボリュームマウント設定を追加

nginxサービスのvolumes:セクションに以下の行を追加します:

services:
  nginx:
    # 既存の設定...
    volumes:
      # 既存のボリューム設定...
      - ./nginx/.htpasswd:/etc/nginx/.htpasswd:ro
説明: この設定により、ホスト上の.htpasswdファイルがnginxコンテナ内の/etc/nginx/.htpasswdにマウントされます。:roはread-only(読み取り専用)を意味します。

ステップ5:設定の反映と確認

1Docker Composeを再起動

変更した設定を反映させるために、Docker Composeサービスを再起動します。

cd /root/dify/docker && docker compose down && docker compose up -d

2Nginx設定の構文チェック(オプション)

設定に問題がないか確認するには、以下のコマンドを実行します。

docker exec $(docker ps -qf "name=nginx") nginx -t

3アクセス確認

ブラウザでDifyのウェブサイトにアクセスして、Basic認証のダイアログが表示されることを確認します。先ほど設定したユーザー名とパスワードを入力してアクセスできることを確認しましょう。

トラブルシューティング: 認証ダイアログが表示されない場合や、認証後に403 Forbiddenエラーが表示される場合は、以下を確認してください:
  • Docker Composeが正常に再起動できているか
  • .htpasswdファイルが正しいパスに存在するか
  • Nginx設定ファイルに構文エラーがないか

ステップ6:トラブル発生時のロールバック方法

万が一問題が発生した場合は、バックアップから設定を復元できます。

1バックアップから設定を復元

cp backup_folder/日付/default.conf dify/docker/nginx/conf.d/
cp backup_folder/日付/.htpasswd dify/docker/nginx/
# 必要に応じてdocker-compose.yamlも復元
cp backup_folder/日付/docker-compose.yaml dify/docker/

2Docker Composeを再起動

cd /root/dify/docker && docker compose down && docker compose up -d

まとめと注意点

これで、DifyのウェブサイトにBasic認証が設定され、ユーザー名とパスワードを知っている人だけがアクセスできるようになりました。

セキュリティに関する注意点:
  • Basic認証は暗号化されていないため、HTTPS(SSL/TLS)と併用することを強く推奨します。
  • パスワードは定期的に変更しましょう。
  • 強力なパスワードを使用しましょう。
  • より高度なセキュリティが必要な場合は、VPNやIP制限などの追加対策も検討してください。
重要: Basic認証は基本的なセキュリティ対策であり、完全な保護を保証するものではありません。機密性の高いデータや重要なサービスの場合は、より高度なセキュリティ対策を検討してください。
会社紹介

運営:株式会社Spovisor(スポバイザー)

株式会社Spovisorではノーコード・ローコードツールを使ったシステム開発、アプリ開発を実施しています。
要件定義から伴走して支援し、安価・スピーディー・柔軟な開発を行います。無料でご相談もお受けしております。