MENU

複数DifyインスタンスのためのNginxリバースプロキシ設定ガイド (Ubuntu + Nginx)

当ページのリンクには広告が含まれています。

Difyコミュニティ版は非常に強力ですが、デフォルトの設定では1台のサーバーで1つのDifyインスタンスしか公開できません(ポート80/443を占有するため)。

しかし、Nginxリバースプロキシとしてホストサーバーに設定することで、dify-a.yourdomain.comdify-b.yourdomain.com のように、異なるドメイン名(サブドメイン)でアクセスされた場合に、それぞれ対応するDifyコンテナへリクエストを振り分けることが可能になります。

この記事では、1台のUbuntuサーバー上で複数のDifyインスタンス(例: difyaiaidify)を運用するための、ホストNginxの設定手順を詳しく解説します。SSL(HTTPS)の設定もこのNginxで行います。

前提条件:

目次

ステップ1: ホストサーバーへのNginxインストール

まず、リバースプロキシとして機能させるNginxをホストサーバー(Difyコンテナが動いているサーバー)にインストールします。

1.システムユーザーの作成(任意)

Nginxが特権のないユーザーで実行されるよう、ユーザーとグループを作成します。

sudo groupadd nginx
sudo useradd -g nginx nginx

2.パッケージのインストール:

OSのパッケージマネージャー(Ubuntu/Debianの場合はapt)でNginxをインストールします。

# パッケージリストを更新
sudo apt update

# Nginxをインストール
sudo apt install nginx

# (任意) Nginx用のシステムユーザーを確認または作成する場合
# sudo groupadd nginx
# sudo useradd -g nginx nginx
# (通常、aptでインストールすると自動で作成されます)

# インストール後、Nginxサービスの状態を確認
sudo systemctl status nginx
# ● nginx.service - A high performance web server...
#      Active: active (running) ... と表示されればOK

ステップ2: 各Difyコンテナの設定変更 (ポートとHTTPS)

次に、各Difyインスタンスが外部から直接アクセスされるのではなく、ホストのNginx経由でのみアクセスされるように設定を変更します。

2.1: ポート設定の変更 (docker-compose.yaml)

各Difyインスタンスの docker ディレクトリにある docker-compose.yaml ファイルを編集します。nginx サービスの ports: 設定を、ホストのローカルループバックアドレス (127.0.0.1) にのみバインドするように変更します。これにより、外部ネットワークからの直接接続を防ぎます。

インスタンス1 (difyai の例): ports:'127.0.0.1:8080:80' に変更します(ホストの8080番ポートをコンテナの80番に)。

# /home/user/difyai/docker/docker-compose.yaml を編集

services:
  nginx:
    image: nginx:latest
    container_name: difyai-nginx # コンテナ名を区別しやすくする (任意)
    # ... (既存の設定) ...
    ports:
-     - "${EXPOSE_NGINX_PORT:-80}:80" # 元の設定をコメントアウトまたは削除
-     - "${EXPOSE_NGINX_SSL_PORT:-443}:443" # SSLはホストNginxで行うため不要
+     - "127.0.0.1:8080:80" # ローカルホストの8080番にバインド
    # ... (以下略) ...

インスタンス2 (aidify の例): ports:'127.0.0.1:8081:80' に変更します(ホストの8081番ポートを使用)。ポート番号はインスタンスごとに重複しないように設定してください。

# /home/user/aidify/docker/docker-compose.yaml を編集

services:
  nginx:
    image: nginx:latest
    container_name: aidify-nginx # コンテナ名を区別しやすくする (任意)
    # ... (既存の設定) ...
    ports:
-     - "${EXPOSE_NGINX_PORT:-80}:80"
-     - "${EXPOSE_NGINX_SSL_PORT:-443}:443"
+     - "127.0.0.1:8081:80" # ローカルホストの8081番にバインド
    # ... (以下略) ...

2.2: Dify内部NginxのHTTPS無効化 (.env)

各Difyインスタンスの docker ディレクトリにある .env ファイルを編集し、Difyコンテナ内のNginxがHTTPSを処理しないように設定します。これは、SSL/TLSの処理はホスト側のNginxが一括して行うためです。

# /home/user/difyai/docker/.env と /home/user/aidify/docker/.env の両方を編集

# ... (既存の設定) ...

# Whether Nginx enables HTTPS support. Requires configuring NGINX_SSL_CERT_FILENAME and NGINX_SSL_CERT_KEY_FILENAME.
# Default is false.
- NGINX_HTTPS_ENABLED=true # もし true になっていたら false に変更
+ NGINX_HTTPS_ENABLED=false

# ... (以下略) ...
  • .env ファイル内の EXPOSE_NGINX_PORTEXPOSE_NGINX_SSL_PORT の設定は、docker-compose.yaml で直接 127.0.0.1:... と指定したため、無視されます。

ステップ3: ホストNginxのリバースプロキシ設定

ホストサーバーにインストールしたNginxの設定ファイルを作成し、ドメイン名に基づいてリクエストを適切なDifyコンテナ(のローカルポート)に転送(プロキシ)するように設定します。

3.1: Nginx設定ファイルの作成

/etc/nginx/sites-available/ ディレクトリに、設定ファイル(例: dify-proxy.conf)を新規作成します。

sudo vi /etc/nginx/sites-available/dify-proxy.conf
# または sudo nano /etc/nginx/sites-available/dify-proxy.conf

以下の内容を記述します。ドメイン名、SSL証明書/秘密鍵のパス、proxy_pass で指定するポート番号は、ご自身の環境に合わせて必ず変更してください。

# HTTP (80番) へのアクセスは HTTPS (443番) へリダイレクト
server {
    listen 80;
    listen [::]:80; # IPv6対応
    server_name difyai.yourdomain.com aidify.yourdomain.com; # ★ご自身のドメイン名に変更

    # Let's Encrypt 認証用の設定 (Certbotを使う場合)
    location ~ /.well-known/acme-challenge/ {
        root /var/www/html; # Certbotが使うディレクトリに合わせてください
        allow all;
    }

    # 上記以外は HTTPS へリダイレクト
    location / {
        return 301 https://$host$request_uri;
    }
}

# --- Dify インスタンス 1 (difyai) ---
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2; # IPv6対応
    server_name difyai.yourdomain.com; # ★ご自身のドメイン名に変更

    # --- SSL設定 ---
    ssl_certificate /etc/letsencrypt/live/[difyai.yourdomain.com/fullchain.pem](https://difyai.yourdomain.com/fullchain.pem); # ★証明書パスに変更
    ssl_certificate_key /etc/letsencrypt/live/[difyai.yourdomain.com/privkey.pem](https://difyai.yourdomain.com/privkey.pem); # ★秘密鍵パスに変更
    # (推奨: より強力なSSL設定を追加 - 以下は例)
    # include /etc/letsencrypt/options-ssl-nginx.conf;
    # ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # --- リバースプロキシ設定 ---
    location / {
        # Difyコンテナ1 (difyai) がリッスンしているローカルポートを指定
        proxy_pass [http://127.0.0.1:8080](http://127.0.0.1:8080);

        # 必須ヘッダー設定
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket対応 (Difyが必要とする場合)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # タイムアウト設定 (必要に応じて調整)
        # proxy_connect_timeout 60s;
        # proxy_send_timeout 60s;
        # proxy_read_timeout 60s;
    }
}

# --- Dify インスタンス 2 (aidify) ---
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name aidify.yourdomain.com; # ★ご自身のドメイン名に変更

    # --- SSL設定 ---
    ssl_certificate /etc/letsencrypt/live/[aidify.yourdomain.com/fullchain.pem](https://aidify.yourdomain.com/fullchain.pem); # ★証明書パスに変更
    ssl_certificate_key /etc/letsencrypt/live/[aidify.yourdomain.com/privkey.pem](https://aidify.yourdomain.com/privkey.pem); # ★秘密鍵パスに変更
    # (推奨: 上記と同様の強力なSSL設定を追加)

    # --- リバースプロキシ設定 ---
    location / {
        # Difyコンテナ2 (aidify) がリッスンしているローカルポートを指定
        proxy_pass [http://127.0.0.1:8081](http://127.0.0.1:8081);

        # 必須ヘッダー設定 (上記と同様)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket対応 (上記と同様)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # タイムアウト設定 (上記と同様)
    }
}

3.2: Nginx設定の有効化

作成した設定ファイルを Nginx が読み込むように、シンボリックリンクを作成します。デフォルトの設定ファイル (default) は無効化しておくと良いでしょう。

# デフォルト設定を無効化 (存在する場合)
sudo rm /etc/nginx/sites-enabled/default

# 作成した設定ファイルを有効化
sudo ln -s /etc/nginx/sites-available/dify-proxy.conf /etc/nginx/sites-enabled/

# Nginx設定ファイルの構文チェック
sudo nginx -t
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful
# と表示されればOK

構文エラーが出た場合は、dify-proxy.conf の記述内容(特に {}; の閉じ忘れ)を確認してください。

ステップ4: サービスの再起動と動作確認

設定が完了したら、関連するサービスを再起動して変更を反映させます。

4.1: 各Difyインスタンスの再起動

各Difyインスタンスの docker ディレクトリに移動し、docker compose downdocker compose up -d を実行して、ポート設定などを反映させた状態でコンテナを再起動します。

# インスタンス1 (difyai) のディレクトリへ移動
cd /home/user/difyai/docker
sudo docker compose down
sudo docker compose up -d

# インスタンス2 (aidify) のディレクトリへ移動
cd /home/user/aidify/docker
sudo docker compose down
sudo docker compose up -d

4.2: ホストNginxの再起動

ホストのNginxサービスを再起動して、新しいリバースプロキシ設定を読み込ませます。

sudo systemctl restart nginx

4.3: ポート接続確認 (任意)

ホストサーバーで、Nginxが80番と443番をリッスンし、Difyコンテナが指定したローカルポート(8080, 8081)をリッスンしているか確認できます。

# Nginx が 80, 443 をリッスンしているか確認
sudo lsof -i :80
sudo lsof -i :443

# Docker (Nginxコンテナ) がローカルポートをリッスンしているか確認
sudo lsof -i :8080
sudo lsof -i :8081
# または
ss -tulnp | grep -E '8080|8081'

【推奨】業務システム化に有効なアイテム

生成AIを学ぶ

システム化のパートナー(ミラーマスター合同会社)

VPSサーバの選定

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次