
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 で固定されていることです。

やりたい事
ホスト上の 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 を使った業務の自動化・改善を行っています。ご興味のある方は是非以下のお問い合わせフォームよりお問い合わせください。
コメントを残す