リモート開発メインのソフトウェア開発企業のエンジニアブログです

Dify と n8n を同じサーバー、違うホスト名で動かす

目次

メモを兼ねた小ネタです。

Dify と n8n 等の他のサービスを同じサーバー(VPS)にインストールしました。それぞれ https://dify.example.com と https://n8n.example.com で動くようにする、というのが目標です。

前提知識

  • ネットワークの基礎知識
  • HTTP の Host ヘッダー等の基礎知識

(問題点というほどではないが、)背景

Dify をインストールして SSL を有効化した

最初、VPS に Dify をインストールしました。Dify をセルフホストするには、以下の方法が最短です。

Deploy Dify with Docker Compose – Dify Docs

Let’s Encrypt を使った SSL 証明書を有効にするには以下の手順に従います。

dify/docker/certbot/README.md at main · langgenius/dify

この方法は、Dify の Docker Compose のサービスの1つとして nginx が稼働して、その nginx が SSL 証明書を提供します。そして、その nginx が、ホストの80, 443ポートを専有します。

.env の変更点を一応載せておきます。

--- .env.example        2026-06-16 06:01:21.207367515 +0000
+++ .env        2026-06-16 18:25:33.292521871 +0000
@@ -240,19 +240,22 @@

 # Nginx and Docker Compose
 NGINX_SERVER_NAME=_
-NGINX_HTTPS_ENABLED=false
+NGINX_HTTPS_ENABLED=true
 NGINX_PORT=80
 NGINX_SSL_PORT=443
-NGINX_SSL_CERT_FILENAME=dify.crt
-NGINX_SSL_CERT_KEY_FILENAME=dify.key
+NGINX_SSL_CERT_FILENAME=fullchain.pem
+NGINX_SSL_CERT_KEY_FILENAME=privkey.pem
 NGINX_SSL_PROTOCOLS=TLSv1.2 TLSv1.3
 NGINX_WORKER_PROCESSES=auto
 NGINX_CLIENT_MAX_BODY_SIZE=100M
 NGINX_KEEPALIVE_TIMEOUT=65
 NGINX_PROXY_READ_TIMEOUT=3600s
 NGINX_PROXY_SEND_TIMEOUT=3600s
-NGINX_ENABLE_CERTBOT_CHALLENGE=false
+NGINX_ENABLE_CERTBOT_CHALLENGE=true
 NGINX_SOCKET_IO_UPSTREAM=api_websocket:5001
 EXPOSE_NGINX_PORT=80
 EXPOSE_NGINX_SSL_PORT=443
 COMPOSE_PROFILES=${VECTOR_STORE:-weaviate},${DB_TYPE:-postgresql},collaboration
+
+CERTBOT_DOMAIN=dify.example.com
+CERTBOT_EMAIL=mail@example.comCode language: PHP (php)

後から n8n をインストールした

n8n も同じサーバーに入れようと思いました。一番簡単なセットアップ方法は以下の通りです。

One-line setup | Deploy | n8n Docs

n8n には Dify のような組み込みの nginx, SSL などが無いので、別途用意する必要があります。

OSS 版 n8n のドキュメントはメンテされていないページなどがあり情報が錯綜しるところもありますが、今回は nginx を使います。

ここで問題となるのは、ホストの80, 443が Dify の nginx に専有されていて、ホスト名も dify.example.com で固定されていることです。

Moba Pro

やりたい事

ホスト上の nginx が80, 443で待ち受けて、dify.example.com でアクセスされた場合は Dify の nginx に流し、n8n.example.com でアクセスされた場合は n8n の5678番ポートに流す形です。

ホスト上の nginx --- (dify.example.com) -- Dify の nginx
                `- (n8n.example.com) --- n8nCode language: CSS (css)

設定

Dify: SSL の無効化、バインドアドレス・ポートの変更

Dify 内の nginx で SSL を使用するのは止め、0.0.0.0:80, 443を待ち受けていたのを127.0.0.1:8080と8443に変更しました。変更後の .env は以下の通りです。今見直したら不要な変更も混じってますが、害は無いですしそこは無視してください。

--- .env.example	2026-10-24 16:31:03.361702507 +0000
+++ .env	2026-10-26 17:38:54.518665220 +0000
@@ -284,8 +284,8 @@
 NGINX_HTTPS_ENABLED=false
 NGINX_PORT=80
 NGINX_SSL_PORT=443
-NGINX_SSL_CERT_FILENAME=dify.crt
-NGINX_SSL_CERT_KEY_FILENAME=dify.key
+NGINX_SSL_CERT_FILENAME=fullchain.pem
+NGINX_SSL_CERT_KEY_FILENAME=privkey.pem
 NGINX_SSL_PROTOCOLS=TLSv1.2 TLSv1.3
 NGINX_WORKER_PROCESSES=auto
 NGINX_CLIENT_MAX_BODY_SIZE=100M
@@ -294,6 +294,9 @@
 NGINX_PROXY_SEND_TIMEOUT=3600s
 NGINX_ENABLE_CERTBOT_CHALLENGE=false
 NGINX_SOCKET_IO_UPSTREAM=api_websocket:5001
-EXPOSE_NGINX_PORT=80
-EXPOSE_NGINX_SSL_PORT=443
+EXPOSE_NGINX_PORT=127.0.0.1:8080
+EXPOSE_NGINX_SSL_PORT=127.0.0.1:8443
 COMPOSE_PROFILES=${VECTOR_STORE:-weaviate},${DB_TYPE:-postgresql},collaborationCode language: JavaScript (javascript)

n8n の変更: バインドアドレスを 0.0.0.0 -> 127.0.0.1 に

n8n は、上述のインストール方法だと5678ポートがインターネットに公開されているので、それを127.0.0.1に限定します。変更するファイルは compose.yml です。

--- compose.yml.bak	2026-10-27 02:27:18.854687207 +0000
+++ compose.yml	2026-10-27 02:27:57.754983854 +0000
@@ -83,7 +83,7 @@
       sandbox-api:
         condition: service_healthy
     ports:
-      - '5678:5678' # the only port that should be internet-facing
+      - '127.0.0.1:5678:5678'
     env_file: .env
     volumes:
       - n8n-data:/home/node/.n8nCode language: CSS (css)

nginx の設定

あとは、nginx で dify.example.com と n8n.example.com の設定を作成し、Certbot で Let’s Encrypt の証明書を有効化します。

/etc/nginx/sites-available/dify.example.com は以下の通りにします。AI に作ってもらいました。

server {
    listen 80;
    server_name dify.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name dify.example.com;

    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    client_max_body_size 100m;   # ファイルアップロード用(Dify 側の上限もあります)

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        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;

        # LLM のストリーミング応答(SSE)を途切れさせないため
        proxy_buffering off;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}Code language: PHP (php)

/etc/nginx/sites-available/n8n.example.com は以下の通りにします。

server {
    listen 80;
    server_name n8n.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name n8n.example.com;

    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        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;
    }
}Code language: PHP (php)

その後、/etc/nginx/sites-enabled にリンクを貼ります。

ln -s /etc/nginx/sites-available/dify.example.com /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/n8n.example.com /etc/nginx/sites-enabled/

あとは、以下のコマンドで SSL 証明書を有効化します。

certbot --nginx -d dify.example.com
certbot --nginx -d n8n.example.comCode language: CSS (css)

感想等

新しめのツールは AI の知識が古い

Dify、n8n 共に、開発が活発に行われているツールです。設定変更のやり方を AI に聞いても、古い情報だったり間違えている情報が返ってくることが多かったので、モデル内の知識ではなくドキュメントを参照するように伝える必要がありました。

AWS だと地味に費用がかかる

以前、AWS で内部向けに n8n を立てたりしていました。ECS を使っていたのですが、サイズを小さくしていても月に千円以上はかかるので、たまにテストで使うだけなのに勿体ないと思って消してしまいました。

また、ローカルに Dify をインストールして試したりもしたのですが、それだと自分1人しか使えません。

今回は月2000円弱の格安 VPS (メモリ8GB)に Dify と n8n を詰め込みました。メモリにはまだ余裕があるので、他にも気になるソフトなどがあればインストールして試してみようと思います。

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.6Gi       3.0Gi       2.6Gi        26Mi       2.3Gi       4.6Gi
Swap:          8.0Gi          0B       8.0Gi

まとめ

Dify の Docker Compose には nginx が組み込まれていて、SSL を使う事も出来ます。ただ、同じサーバー上で違うホスト名で別のサービスを同居させたい場合は、Dify の nginx で80, 443を使うのを止めて8080, 8443などに変更し、その前段にホスト側で nginx を起動するようにするのが簡単です。

宣伝: もばらぶでは、主に中小企業向けに AI・MCP を使った業務の自動化・改善を行っています。ご興味のある方は是非以下のお問い合わせフォームよりお問い合わせください。

お問い合わせ – もばらぶん

← 前の投稿

次の投稿 →

Notionで書き溜めた約1,000件のCDレビューをWebサーバーで安全に公開する

コメントを残す