Difyの各インスタンスへのリクエストを振り分けるリバースプロキシ(Nginx)の設定および運用

はい、承知しました。Nginxのインストールから運用まで、これまでの内容を整理してまとめます。


 

1. Nginxのインストール

 

Difyコンテナ内のNginxではなく、ホストサーバーにNginxをインストールします。これは、Difyの各インスタンスへのリクエストを振り分けるリバースプロキシとして機能させるためです。

  1. システムユーザーの作成(任意): Nginxが特権のないユーザーで実行されるよう、ユーザーとグループを作成します。

    Bash

    sudo groupadd nginx
    sudo useradd -g nginx nginx
    
  2. パッケージのインストール: OSのパッケージマネージャー(Ubuntu/Debianの場合はapt)でNginxをインストールします。

    Bash

    sudo apt update
    sudo apt install nginx
    

 

2. Difyコンテナの設定変更

 

Difyの各コンテナ(difyaiaidify)が、ホストのNginxリバースプロキシと連携できるように設定を変更します。

  1. docker-compose.ymlのポート設定変更: 各環境のdocker-compose.ymlファイルを開き、Nginxサービスのports設定を、ホストの**ローカルループバックアドレス(127.0.0.1)**にバインドするように変更します。これにより、外部からの直接アクセスはできなくなり、ホストのNginx経由でのみアクセスが可能になります。
    • difyai環境: 8080ポートを使用

      YAML

      services:
        nginx:
          ports:
            - '127.0.0.1:8080:80'
      
    • aidify環境: 8081ポートを使用

      YAML

      services:
        nginx:
          ports:
            - '127.0.0.1:8081:80'
      
  2. NGINX_HTTPS_ENABLEDの設定変更: 各Dify環境の.envファイルで、NginxコンテナがHTTPSを無効にするように設定します。これは、HTTPSの処理はホストのNginxが行うためです。

    Ini, TOML

    NGINX_HTTPS_ENABLED=false
    

 

3. Nginxリバースプロキシの設定

 

ホストのNginxが、各ドメインへのリクエストを対応するDifyコンテナに振り分けるように設定します。

  1. 設定ファイルの作成: /etc/nginx/sites-available/ディレクトリにdify.confというファイルを作成し、以下の内容を記述します。

    Nginx

    server {
        listen 80;
        server_name difyai.mirror-master.com aidify.mirror-master.com;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name difyai.mirror-master.com;
    
        ssl_certificate /etc/ssl/difyai.crt;
        ssl_certificate_key /etc/ssl/difyai.key;
    
        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
    server {
        listen 443 ssl;
        server_name aidify.mirror-master.com;
    
        ssl_certificate /etc/ssl/aidify.crt;
        ssl_certificate_key /etc/ssl/aidify.key;
    
        location / {
            proxy_pass http://localhost:8081;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
  2. 設定ファイルの有効化: 古い設定ファイルを削除し、新しい設定を有効化するためのシンボリックリンクを作成します。

    Bash

    sudo rm /etc/nginx/sites-enabled/*
    sudo ln -s /etc/nginx/sites-available/dify.conf /etc/nginx/sites-enabled/
    

 

4. 運用と再起動

 

設定変更を適用し、両方のDifyインスタンスを安定して稼働させます。

  1. Portの接続確認: Nginxの動作を確認します。
    sudo lsof -i :80
    sudo lsof -i :443
    
  1. 設定のテスト: Nginxの設定に構文エラーがないか確認します。

    Bash

    sudo nginx -t
    
  2. NginxとDockerコンテナの再起動: ホストのNginxと、それぞれのDifyコンテナを再起動します。

    Bash

    sudo systemctl restart nginx
    cd ~/difyai/docker
    sudo docker-compose up -d
    cd ~/aidify/docker
    sudo docker-compose up -d
    
  3. サーバー再起動後の確認: restart: alwaysの設定により、サーバー再起動後も両方のDifyインスタンスが自動で起動します。sudo docker psでコンテナが正常に稼働しているか確認してください。

この手順により、複数のDifyインスタンスを1台のサーバーで、それぞれのドメイン名で安全に運用できます。

コメント