n8nの反向代理でConnection lostに詰まる人へ|Nginx設定と安全確認をまるっと整理
こんにちは、ミンビズ運営のミナトです。「n8n 反 向 代理」と検索しているあなたは、おそらくn8nを自分のサーバーに置いて、Nginxなどのリバースプロキシ経由で安全に公開したい、でもログイン後の404や「Connection lost」、WebSocketまわりで詰まっている状態かなと思います。ここ、設定項目が少しズレるだけで一気にややこしくなるんですよね。
この記事では、Nginxでn8nを反向代理、つまりリバースプロキシ配下に置くときに見るべきポイントを整理しました。WebSocket、WEBHOOK_URL、N8N_PROXY_HOPS、サブパス公開、TLS、ポート5678の扱い、webhookの守り方まで、公開前に確認したい条件を中心にまとめています。
| この記事のポイント |
|---|
| ✅ n8nの反向代理で最初に見るべきWebSocket設定がわかる |
✅ WEBHOOK_URLやN8N_PROXY_HOPSなど重要な環境変数を整理できる |
✅ /n8n/n8n/のような404やConnection lostの原因を切り分けやすくなる |
| ✅ 公開前に見たいTLS、防火壁、webhook保護、ログ確認の流れがわかる |
n8nの反向代理で最初に見るべき基本設定

- n8nの反向代理はWebSocketと外部URL設定をそろえることが第一です
- NginxではUpgradeヘッダーを通さないとConnection lostが起きやすいです
- WEBHOOK_URLとN8N_PROXY_HOPSは反向代理構成で優先確認する値です
- /n8n/配下公開は二重パスの404を起こしやすいので慎重に見るべきです
- Dockerの5678番ポートは外部公開せずlocalhostに寄せるのが無難です
- 「n8n 反 向 代理についてAI回答を見る」前に公式値とログを見るのが近道です
n8nの反向代理はWebSocketと外部URL設定をそろえることが第一です

n8nを反向代理で公開するときの結論は、ブラウザから見えるURLと、n8n内部が生成するURLと、Nginxが転送する接続情報をズレさせないことです。ここがズレると、ログイン画面までは出るのに、ログイン後に404になったり、エディタ上で「Connection lost」が出たりします。
反向代理という言葉は、中国語圏の記事でよく使われる「リバースプロキシ」の意味です。日本語でいうと、インターネットからのアクセスをNginxが受けて、裏側のn8n本体、たとえば127.0.0.1:5678へ流す構成ですね。n8nを直接外に出さず、Nginxが入口になるイメージです。
特にn8nは、ただ画面を表示するだけではありません。エディタ画面のリアルタイム更新や実行状況の反映に、WebSocketやServer-Sent Events系の接続が関係します。ここでNginxの転送設定が足りないと、画面は開くのに中身がうまく動かない、という状態になりやすいです。
n8n公式ドキュメントでも、リバースプロキシ配下ではWEBHOOK_URLを手動設定し、N8N_PROXY_HOPSを設定すること、さらにX-Forwarded-For、X-Forwarded-Host、X-Forwarded-Protoなどを最後のプロキシで渡すことが案内されています。参考: https://docs.n8n.io/hosting/configuration/configuration-examples/webhook-url/
🔎 n8n反向代理で最初に見る場所
| 確認箇所 | 見る理由 | ありがちな症状 |
|---|---|---|
| NginxのWebSocket転送 | エディタ接続が切れないようにするため | Connection lost |
WEBHOOK_URL |
外部サービスに正しいURLを出すため | webhook URLが内部向きになる |
N8N_PROXY_HOPS |
プロキシ越しの接続情報を扱うため | IP制限やURL認識がズレる |
N8N_EDITOR_BASE_URL |
エディタや通知系URLをそろえるため | ログイン後の遷移が変になる |
| ポート公開 | 5678番を直接外に出さないため | Nginxを通さずアクセスできる |
ざっくり言うと、「Nginxだけ直せば全部解決」ではないです。Nginx、docker-compose、n8nの環境変数をセットで見る必要があります。ここを分けて考えると、原因切り分けがかなり楽になりますよ。
NginxではUpgradeヘッダーを通さないとConnection lostが起きやすいです

n8nのエディタで「Connection lost」が出る場合、まず疑いたいのがWebSocketの転送です。GitHubのn8n Issue #14653でも、n8n 1.88.0へのアップグレード後に、Nginxのリバースプロキシ配下でWebSocket接続が失敗する事例が投稿されています。ただし、そのIssueは個別事例であり、すべての環境で同じ原因と断定はできません。参考: https://github.com/n8n-io/n8n/issues/14653
NginxでWebSocketを通すには、proxy_http_version 1.1、Upgrade、Connectionの設定が重要です。通常のHTTP転送だけならページ表示はできても、WebSocketのアップグレードが通らないと、エディタ側のリアルタイム接続が失敗しやすくなります。
よく見る設定は、Nginxの先頭あたりにmapを置き、$connection_upgradeを使う形です。これにより、ブラウザがWebSocketへ切り替えたいときはupgradeを渡し、通常のHTTPではcloseにする、という整理ができます。
🛠 Nginxで見たいWebSocketまわりの例
| 設定 | 役割 |
|---|---|
proxy_http_version 1.1; |
WebSocketのアップグレードに必要になりやすいHTTP/1.1を使う |
proxy_set_header Upgrade $http_upgrade; |
ブラウザからのUpgrade要求を裏側へ渡す |
proxy_set_header Connection $connection_upgrade; |
接続切り替えの意図を裏側へ渡す |
proxy_buffering off; |
リアルタイム更新の遅れを減らす狙い |
proxy_cache off; |
エディタやAPIの応答を変にキャッシュしないため |
設定例としては、次のような形がよく使われます。実際のドメインや証明書パスは環境に合わせて変えてください。
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl;
server_name n8n.example.com;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-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;
proxy_buffering off;
proxy_cache off;
chunked_transfer_encoding off;
}
}
ここで大事なのは、サンプルをそのまま貼るより、自分の構成で何を転送しているかを見ることです。Cloudflare、ロードバランサー、Nginx、Dockerなどが間に入るほど、N8N_PROXY_HOPSやX-Forwarded-*の意味が大きくなります。
WEBHOOK_URLとN8N_PROXY_HOPSは反向代理構成で優先確認する値です

n8nの反向代理では、WEBHOOK_URLとN8N_PROXY_HOPSを最初に確認したいです。WEBHOOK_URLは、外部サービスに見せるwebhookのURLを決める重要な値です。n8n本体が裏側のlocalhost:5678で動いている場合、自動生成のままだと外部から使えないURLになる可能性があります。
N8N_PROXY_HOPSは、n8nが何段のプロキシ越しに動いているかを扱う設定です。公式ドキュメントでは、リバースプロキシ構成の例としてN8N_PROXY_HOPS=1が案内されています。ただし、Cloudflareや追加ロードバランサーを挟む場合は、構成に応じて慎重に確認したほうがいいです。
N8N_EDITOR_BASE_URLも見落としやすい値です。n8n公式のユーザー管理ベストプラクティスでは、リバースプロキシ配下で正しいURLを生成するために、N8N_HOST、N8N_PORT、N8N_PROTOCOL、N8N_EDITOR_BASE_URLの設定が挙げられています。参考: https://docs.n8n.io/user-management/best-practices/
⚙️ 反向代理で見たい環境変数
| 環境変数 | 例 | 何に効くか |
|---|---|---|
N8N_HOST |
n8n.example.com |
n8nが外部向けホスト名を認識する |
N8N_PORT |
5678 |
n8n内部の待ち受けポート |
N8N_PROTOCOL |
https |
外部向けURLのプロトコル |
WEBHOOK_URL |
https://n8n.example.com/ |
webhookの外部URL |
N8N_EDITOR_BASE_URL |
https://n8n.example.com/ |
エディタや通知系URL |
N8N_PROXY_HOPS |
1 |
プロキシ段数の認識 |
docker-composeで書くなら、たとえば次のような考え方です。これは一例なので、ドメイン、DB、認証、実行モードはあなたの環境に合わせてください。
services:
n8n:
image: n8nio/n8n:latest
restart: always
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=n8n.example.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.example.com/
- N8N_EDITOR_BASE_URL=https://n8n.example.com/
- N8N_PROXY_HOPS=1
- N8N_SECURE_COOKIE=true
注意したいのは、ネット上の記事にはN8N_BASE_URLなど、時期や構成によって扱いが違う値も出てくることです。調べた範囲では、現在の公式ドキュメントで確認しやすい中心は、WEBHOOK_URL、N8N_PROXY_HOPS、N8N_EDITOR_BASE_URL、N8N_HOST、N8N_PROTOCOLあたりです。古い記事だけで判断せず、公式の環境変数一覧も合わせて見るのが無難です。参考: https://docs.n8n.io/hosting/configuration/environment-variables/deployment/
/n8n/配下公開は二重パスの404を起こしやすいので慎重に見るべきです

n8nをhttps://example.com/n8n/のようなサブパスで公開したい人もいます。ですが、調べた範囲では、この構成はログイン後に/n8n/n8n/へ飛んで404になるようなトラブルにつながりやすいです。n8n Communityにも、N8N_PATH=/n8n/やWEBHOOK_URL=https://mydomain/n8n/を使った構成で、ログイン後に/n8n/n8n/へリダイレクトされ404になる相談が掲載されています。参考: https://community.n8n.io/t/i-get-a-404-error-every-time-i-login-n8n-n8n/162532
サブパス公開が難しい理由は、ブラウザ側のパス、n8n側のベースパス、Nginxのproxy_pass末尾スラッシュが絡みやすいからです。location /n8n/に対してproxy_pass http://127.0.0.1:5678/;のように書くと、パスの削り方が変わります。そこにN8N_PATH=/n8n/が加わると、二重に/n8n/が付くことがあります。
n8n公式の環境変数ページでも、N8N_PATHとリバースプロキシの組み合わせはフォルダナビゲーションの問題を起こす可能性があるため、サブドメインを使うか、N8N_PATHをリバースプロキシなしで使う案内が確認できます。つまり、初心者ほどn8n.example.comのようなサブドメイン公開に寄せたほうが、詰まりにくいです。
🧭 サブドメインとサブパスの比較
| 公開方法 | URL例 | 難しさ | コメント |
|---|---|---|---|
| サブドメイン | https://n8n.example.com/ |
低め | n8n反向代理では扱いやすい |
| サブパス | https://example.com/n8n/ |
高め | パス重複やログイン後404に注意 |
| 直ポート公開 | http://example.com:5678/ |
運用上は注意 | Nginx/TLSを通さない形になりやすい |
もしサブパスでどうしても運用したいなら、N8N_PATH、WEBHOOK_URL、N8N_EDITOR_BASE_URL、Nginxのlocation、proxy_passの末尾スラッシュを一つずつそろえて見る必要があります。ここは「なんとなく動いた」で済ませると、ログイン、webhook、OAuth、メール通知などの別機能で後からズレが出るかもしれません。
✅ 404が出たときの見直しリスト
| 症状 | 見る場所 | 確認したいこと |
|---|---|---|
/n8n/n8n/になる |
N8N_PATH |
パスを二重に足していないか |
| ログイン後404 | N8N_EDITOR_BASE_URL |
エディタURLが外部URLと一致しているか |
| webhook URLが変 | WEBHOOK_URL |
末尾スラッシュを含めて意図通りか |
| 静的ファイルが404 | Nginx proxy_pass |
locationとのパス変換が合っているか |
| 一部APIだけ失敗 | /rest/転送 |
パス別locationで塞いでいないか |
結論としては、最初の構築ではサブドメイン公開を第一候補にするのがわかりやすいです。サブパス公開はできないと断定するものではありませんが、詰まりどころが増えます。仕事用の自動化基盤として安定運用したいなら、シンプルな構成のほうが後で助かりますよ。
Dockerの5678番ポートは外部公開せずlocalhostに寄せるのが無難です

n8nの標準ポートは5678です。Docker Composeの例でよく見る"5678:5678"は、環境によっては外部から直接n8nにアクセスできる状態になることがあります。NginxでTLSを設定しても、裏口のようにhttp://サーバーIP:5678/で触れてしまうなら、反向代理で守っている意味が薄くなります。
そのため、Nginxとn8nが同じサーバーにあるなら、ポートマッピングは"127.0.0.1:5678:5678"のようにlocalhostへ寄せる形がよく使われます。これなら、同じサーバー上のNginxはn8nに接続できますが、外部から直接5678番へ入りにくくなります。
もちろん、クラウド側のセキュリティグループやUFWでも、外部公開ポートを絞ることが大事です。基本はSSH用の22番、HTTPの80番、HTTPSの443番を必要に応じて開け、5678番は外へ出さない考え方です。ただし、SSHの扱いは環境によって変わるため、閉じる前に現在の接続方法を必ず確認してください。
🔐 公開ポートの考え方
| ポート | 用途 | 外部公開の考え方 |
|---|---|---|
| 22 | SSH | 管理用。IP制限や鍵認証も検討 |
| 80 | HTTP | Let’s Encrypt更新やHTTPS転送で使うことが多い |
| 443 | HTTPS | n8nへアクセスする正式入口 |
| 5678 | n8n本体 | 原則として外部公開しない方向 |
| その他 | DBなど | 外部公開はかなり慎重に判断 |
DockerはiptablesまわりでUFWの想定と違う挙動をすることがあります。中国語のチュートリアルでも、n8nをlocalhostにバインドし、DockerがUFWをすり抜ける可能性に注意する内容が整理されていました。参考: https://www.virtua.cloud/learn/zh/tutorials/nginx-fan-xiang-dai-li-tls-bao-hu-n8n
🧪 直接アクセス確認の例
| 確認 | コマンド例 | 見たい結果 |
|---|---|---|
| HTTPS経由 | curl -I https://n8n.example.com |
200やログイン画面系の応答 |
| 直ポート | curl --connect-timeout 3 http://n8n.example.com:5678 |
接続拒否やタイムアウトが望ましい |
| Docker状態 | docker ps |
n8nが意図したポートで動いている |
| Nginx設定 | sudo nginx -t |
syntax ok |
| ログ | docker compose logs -f n8n |
起動エラーがない |
ここはセキュリティの断定ではなく、運用上の基本姿勢として見てください。n8nは仕事の自動化、API連携、認証情報、webhookを扱うことが多いので、入口をできるだけ整理しておくほうが安心です。
「n8n 反 向 代理についてAI回答を見る」前に公式値とログを見るのが近道です

関連検索ワードに「n8n 反 向 代理 について AI回答を見る」という意図が出ている場合、読者はすぐ答えがほしい状態だと思います。わかります。反向代理まわりは、画面だけ見ると原因が見えにくいんですよね。
ただ、AI回答だけで設定を丸ごと貼り替えるのは少し危ないです。n8nはバージョン、Dockerかnpmか、NginxかCloudflareか、サブドメインかサブパスかで必要な設定が変わります。つまり、一般論として正しい回答でも、あなたの環境ではズレることがあります。
最短ルートは、公式ドキュメントで現在の環境変数名を確認し、手元のログで症状を合わせることです。たとえば、Connection lostならブラウザDevToolsのWebSocket、NginxのUpgradeヘッダー、n8nログを見る。ログイン後404ならN8N_PATHやN8N_EDITOR_BASE_URL、Nginxのパス処理を見る。こう分けると、だいぶ迷いにくいです。
🧩 AI回答を見る前に集めたい情報
| 情報 | なぜ必要か |
|---|---|
| n8nのバージョン | バージョン差の不具合や仕様差を見るため |
| デプロイ方法 | Docker Compose、npm、Kubernetesで設定場所が違うため |
| 公開URL | サブドメインかサブパスかで対応が変わるため |
| Nginx設定 | WebSocketとパス転送の有無を見るため |
| 環境変数 | WEBHOOK_URLなどのズレを見るため |
| エラー内容 | 404、502、Connection lostで原因候補が違うため |
📌 症状別の入口
| 症状 | 最初に見る場所 | 次に見る場所 |
|---|---|---|
| Connection lost | Nginx WebSocket設定 | ブラウザDevToolsのWS |
| 502 Bad Gateway | n8nコンテナ起動状態 | proxy_passの向き先 |
| ログイン後404 | N8N_PATH |
N8N_EDITOR_BASE_URL |
| webhookが外部から動かない | WEBHOOK_URL |
firewall、Nginx location |
| HTTPSなのにCookie警告 | N8N_PROTOCOL |
N8N_SECURE_COOKIE |
AI回答は便利ですが、最後はあなたのサーバーで出ているログが答えに近いです。この記事も、設定を丸暗記するより「どこを見ればいいか」を中心に使ってもらえると、失敗を減らしやすいかなと思います。
n8nの反向代理を運用で安定させる確認項目

- TLSはLet’s EncryptとHTTPS転送までセットで確認するべきです
- WebhookはURLを公開する前提で認証と推測されにくさを見るべきです
- IP制限とレート制限は編集画面とwebhookで分けて考えるべきです
- 502 Bad GatewayはNginxより先にn8n本体の起動状態を見るべきです
- アップロード容量とタイムアウトは長いワークフローほど先に調整すべきです
- RedditやSNSの事例は本文確認できる情報だけ参考にするべきです
- 総括:n8n 反 向 代理のまとめ
TLSはLet’s EncryptとHTTPS転送までセットで確認するべきです

n8nを仕事用に公開するなら、TLS、つまりHTTPS化はほぼ前提として考えたいところです。特にwebhookやログイン画面を扱うなら、HTTPのまま公開する構成は避けたほうが無難です。ここは「便利だからHTTPS」ではなく、認証情報や通信内容を扱う入口としての基本整備です。
多くのチュートリアルでは、Nginxの設定後にCertbotでLet’s Encrypt証明書を取得する流れが紹介されています。sudo certbot --nginx -d n8n.example.comのような形ですね。もちろん、実行前にはDNSがサーバーを向いていること、80番ポートが外から届くこと、Nginx設定が正しいことを確認する必要があります。
HTTPS化で大事なのは、証明書を取るだけではありません。HTTPからHTTPSへ転送されるか、N8N_PROTOCOL=httpsになっているか、WEBHOOK_URLがhttps://で始まっているかも見たいです。ここがズレると、画面はHTTPSでも、n8nが生成するURLがHTTPのままになる可能性があります。
🔒 TLS設定で見る項目
| 確認項目 | 見たい状態 |
|---|---|
| DNS | n8n.example.comがサーバーIPを向いている |
| 80番ポート | 証明書取得やHTTPリダイレクトに使える |
| 443番ポート | HTTPSでアクセスできる |
N8N_PROTOCOL |
https |
WEBHOOK_URL |
https://n8n.example.com/ |
| 証明書更新 | Certbotの自動更新が動く状態 |
HTTPからHTTPSへの転送は、Nginxの80番serverブロックで行うことが多いです。たとえば次のような考え方です。
server {
listen 80;
listen [::]:80;
server_name n8n.example.com;
return 301 https://$host$request_uri;
}
🧪 TLS確認コマンドの例
| 目的 | コマンド例 |
|---|---|
| HTTPS応答を見る | curl -I https://n8n.example.com |
| HTTP転送を見る | curl -I http://n8n.example.com |
| Nginx文法を見る | sudo nginx -t |
| 証明書更新の確認 | sudo certbot renew --dry-run |
| Nginx再読み込み | sudo systemctl reload nginx |
ただし、コマンド例は環境によって変わります。Ubuntu、Debian、Docker Compose、root権限の有無で手順は違うので、あなたのサーバーで実行する前にパスやサービス名を確認してください。
WebhookはURLを公開する前提で認証と推測されにくさを見るべきです

n8nのwebhookは便利ですが、公開URLとして扱う必要があります。外部サービスから呼ばれる入口なので、URLを知っている人がアクセスできる可能性を前提に設計したほうがいいです。ここは「URLを誰にも教えないから大丈夫」と考えすぎないほうが無難です。
n8n公式のWebhookノード資料では、Webhook URLにはテストURLと本番URLがあり、本番URLはワークフローを公開したときに使われると説明されています。また、Pathはデフォルトでランダム生成され、手動指定もできます。参考: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/
つまり、webhookのパスを/webhook/githubのようなわかりやすい名前にすることは、運用上わかりやすい反面、推測されやすくなる可能性があります。外部サービスの仕様上、固定パスが必要な場合もありますが、理由がなければランダム性のあるパスを活かすほうが扱いやすいです。
🪝 Webhookで見るべき観点
| 観点 | 見る理由 |
|---|---|
| Test URLとProduction URL | テスト用と本番用を混同しないため |
| パスのランダム性 | 推測されにくいURLにするため |
| 認証 | 第三者の呼び出しを減らすため |
| 署名検証 | GitHubやStripeなどの正規リクエスト確認に使うため |
| レスポンス時間 | 長時間処理でタイムアウトしないため |
認証方法は連携先によって変わります。n8nのWebhookノード自体にも認証設定がありますし、外部サービスによってはHMAC署名の検証が使われます。GitHubやStripeなどの署名仕様は変わる可能性があるため、実装時は各サービスの公式ドキュメントを確認してください。
⚠️ やりがちな危ない運用
| 運用 | 気になる点 |
|---|---|
| webhookパスを短くする | 推測されやすくなるかもしれない |
| 認証なしで重要処理を動かす | 誰でも起動できる入口になりやすい |
| テストURLを本番連携に使う | エディタ状態に依存しやすい |
| 署名検証を省く | 送信元の確認が弱くなる |
| URLをログや公開記事に貼る | 意図せず拡散する可能性がある |
webhookは、自動化の入口そのものです。仕事、副業、AI活用の文脈でも、フォーム送信、通知、データ登録、決済通知などに使われることがあります。だからこそ、反向代理の設定だけでなく、入口ごとの守り方もセットで見るのが大事です。
IP制限とレート制限は編集画面とwebhookで分けて考えるべきです

n8nを公開するとき、編集画面とwebhookを同じルールで扱うと困ることがあります。編集画面は管理者だけが使う場所なので、IP制限をかけたい。一方でwebhookは外部サービスから呼ばれるため、広く受ける必要がある。このように目的が違うんですね。
そのため、Nginxでは/webhook/、/webhook-test/、/rest/、/のように、パスごとにlocationを分ける構成が紹介されることがあります。webhookにはレート制限をかけ、編集APIにはIP制限をかける、といった考え方です。
ただし、IP制限は便利な反面、Cloudflareやプロキシを挟むと実IPの扱いがズレることがあります。ここでもX-Forwarded-ForやN8N_PROXY_HOPSの理解が関係します。IP制限が効かない、逆に自分が403になる、というときは、Nginxが見ているIPが何かを確認したいです。
🚦 パス別に考える制限
| パス | 主な用途 | 制限の考え方 |
|---|---|---|
/webhook/ |
本番webhook | 外部サービス用に開けつつレート制限 |
/webhook-test/ |
テストwebhook | 本番より厳しめでもよい |
/rest/ |
エディタAPI | IP制限や認証前提で慎重に |
/ |
エディタ画面 | 管理者だけが触る入口として考える |
/api/ |
Public API設定次第 | 利用する場合は認証と公開範囲を確認 |
レート制限は、強くしすぎると正規のwebhookまで落としてしまう可能性があります。GitHubのpush、Stripeのイベント、フォーム連携など、短時間に複数リクエストが来ることもあります。最初はログを見ながら、控えめに調整するほうが現実的です。
🧯 レート制限で見るポイント
| 項目 | 見る理由 |
|---|---|
rate |
1秒あたりの基本リクエスト数 |
burst |
短時間の集中をどこまで許すか |
nodelay |
キューに入れず即処理するか |
limit_req_status |
制限時に返すステータス |
| Nginxログ | 正規リクエストを落としていないか |
IP制限もレート制限も、入れれば安心と断定できるものではありません。自分の運用に合う強さに調整するものです。特に仕事の自動化では、止めすぎると業務フロー自体が止まるので、最初はログを見ながら育てるのがいいかなと思います。
502 Bad GatewayはNginxより先にn8n本体の起動状態を見るべきです

反向代理で502 Bad Gatewayが出ると、Nginx設定が悪いと思いがちです。でも、502は「Nginxが裏側のn8nにうまくつなげない」状態でも出ます。つまり、Nginxの文法が合っていても、n8nコンテナが落ちていたり、ポートが違っていたりすると発生します。
まず見るのは、n8n本体が動いているかです。Docker Composeならdocker compose psやdocker compose logs -f n8nで状態を見ます。npmやsystemdで入れているなら、systemctl status n8nなどを見る形になります。
次に、Nginxのproxy_passが正しい向き先を見ているかを確認します。n8nを127.0.0.1:5678で待ち受けているのに、Nginxが別ポートを見ていれば当然つながりません。Dockerネットワーク構成によっては、サービス名でつなぐ場合もあります。
🧭 502の切り分け表
| 確認順 | 見る場所 | 例 |
|---|---|---|
| 1 | n8n本体 | コンテナやサービスが起動しているか |
| 2 | 待ち受けポート | 5678でlistenしているか |
| 3 | Nginx proxy_pass |
http://127.0.0.1:5678などが合っているか |
| 4 | firewall | 内部通信を塞いでいないか |
| 5 | ログ | n8nログ、Nginx error.log |
502のときは、Nginxを何度も再読み込みする前に、裏側のn8nへサーバー内部から接続できるかを見ると早いです。たとえばサーバー上でcurl -I http://127.0.0.1:5678を試す、といった確認ですね。
🧪 502時に使いやすい確認コマンド
| 目的 | コマンド例 |
|---|---|
| n8nコンテナ確認 | docker compose ps |
| n8nログ確認 | docker compose logs --tail=100 n8n |
| 内部接続確認 | curl -I http://127.0.0.1:5678 |
| Nginx文法確認 | sudo nginx -t |
| Nginxエラー確認 | sudo tail -n 100 /var/log/nginx/error.log |
調べた中国語チュートリアルでも、502が出た場合はn8nが5678番で動いているかを確認する流れが紹介されていました。反向代理のトラブルは、Nginx、n8n、Docker、DNS、TLSが混ざります。症状ごとに入口を分けるのが、遠回りに見えて一番早いです。
アップロード容量とタイムアウトは長いワークフローほど先に調整すべきです

n8nでファイルを扱う、外部APIを待つ、大きなCSVを処理する、AI処理を呼ぶ。このあたりのワークフローでは、Nginxのデフォルト設定が先に限界に当たることがあります。たとえば、リクエストボディの上限や、読み取りタイムアウトですね。
Nginxのclient_max_body_sizeが小さいと、アップロードが失敗する可能性があります。proxy_read_timeoutが短いと、n8n側では処理中なのにNginxが先に接続を切ることがあります。長めの処理をwebhookで受けるなら、ここは先に見ておきたいです。
ただし、タイムアウトを長くすればすべて解決、という話でもありません。長時間webhookを開きっぱなしにすると、呼び出し元サービス側のタイムアウトに当たることもあります。n8n CloudではCloudflareの制限により、長いwebhook応答には別設計が必要になることが公式資料で案内されています。参考: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/common-issues/
⏱ 長時間処理で見たいNginx設定
| 設定 | 例 | 目的 |
|---|---|---|
proxy_connect_timeout |
60s |
裏側への接続待ち |
proxy_read_timeout |
300s |
n8nからの応答待ち |
proxy_send_timeout |
300s |
n8nへの送信待ち |
client_max_body_size |
50m |
アップロード上限 |
| webhook即時応答 | ワークフロー設計側 | 呼び出し元のタイムアウト回避 |
ファイルや長時間処理を扱うなら、webhookの作り方も考えたいです。すぐに結果を返す必要がない処理なら、受付だけ先に返して、結果は別の通知やステータス確認で返す設計もあります。これはn8nに限らず、外部連携ではよくある考え方です。
📦 処理タイプ別の考え方
| 処理タイプ | 注意点 | 向いている設計 |
|---|---|---|
| 小さなフォーム送信 | 比較的シンプル | 即時処理でもよい |
| 大きなCSV処理 | アップロード上限 | 上限調整と分割 |
| AI生成処理 | 応答時間が読みにくい | 受付と結果通知を分ける |
| 外部API待ち | 相手側の遅延 | タイムアウト長め、再試行 |
| 決済webhook | 正確性重視 | 署名検証と即時応答 |
n8nは柔軟なので、つい何でも一つのwebhook内で完結させたくなります。でも、仕事で使う自動化ほど「失敗したときにどこで止まったかわかる設計」が大事です。反向代理の設定とワークフロー設計は、セットで見ると安定しやすいです。
RedditやSNSの事例は本文確認できる情報だけ参考にするべきです

今回の調査結果には、RedditやFacebook、ThreadsなどのURLも含まれていました。ただし、Redditの複数URLは「Please wait for verification」と表示され、提示されたテキストでは本文内容を確認できませんでした。この場合、内容を推測して記事に使うのは避けたほうがいいです。
SNSの投稿も、短い反応や体験談の断片であることが多いです。たとえば「自架は変な問題に遭遇しやすい」というニュアンスの投稿があっても、それを一般的な技術結論として扱うのは強すぎます。参考情報として見る程度がちょうどいいです。
一方で、GitHub Issue、n8n Community、公式ドキュメント、具体的なNginx設定を含むチュートリアルは、設定の確認材料として使いやすいです。もちろん、個別Issueは個別環境の話なので、「このバージョンは必ず壊れる」といった断定は避けたいです。
🔎 情報源ごとの使い方
| 情報源 | 使い方 | 注意点 |
|---|---|---|
| n8n公式ドキュメント | 変数名や仕様確認の中心 | 最新ページを確認する |
| GitHub Issue | 既知の症状例 | 個別環境の可能性がある |
| n8n Community | 実際の相談例 | 解決済みか未解決かを見る |
| 技術ブログ | 設定例の参考 | 日付とn8nバージョンを見る |
| Reddit/SNS | 詰まりどころの雰囲気 | 本文確認できないものは使いすぎない |
記事やAI回答を見るときも、同じです。コマンドが載っているから正しい、ではなく、対象バージョン、OS、Nginx、Docker、公開URLの形が自分と近いかを見る必要があります。特にn8nは更新が速いので、古い記事の変数名が今も中心とは限りません。
🧾 参照時のチェックリスト
| チェック | 見る理由 |
|---|---|
| 公開日 | 古い設定の可能性を見るため |
| n8nバージョン | 仕様差を避けるため |
| Dockerかnpmか | 設定場所が違うため |
| サブドメインかサブパスか | パス問題の有無が変わるため |
| 解決済みか | 未解決相談を結論扱いしないため |
| 公式と一致するか | 変数名や推奨値の確認のため |
ネット上の事例は、困ったときのヒントになります。ただ、最後に信じるべきは、公式ドキュメント、あなたの設定ファイル、あなたのログです。ここを押さえると、「あの記事の通りにしたのに動かない」を減らせます。
総括:n8n 反 向 代理のまとめ

最後に記事のポイントをまとめます。
- n8nの反向代理は、Nginx設定だけでなくn8n環境変数も合わせて見るべきである。
- Connection lostは、WebSocketのUpgradeヘッダー転送不足が原因候補になりやすい。
proxy_http_version 1.1、Upgrade、Connection、X-Forwarded-*は優先確認項目である。WEBHOOK_URLは、外部サービスへ見せる正しいURLを作るために重要である。N8N_PROXY_HOPSは、リバースプロキシ越しの接続情報を扱うために重要である。N8N_EDITOR_BASE_URLは、ログイン後の遷移や通知系URLのズレを防ぐために確認すべき値である。/n8n/のようなサブパス公開は、/n8n/n8n/のような二重パス404を起こしやすい構成である。- 初回構築では、
n8n.example.comのようなサブドメイン公開のほうが扱いやすい。 - Dockerの
5678番ポートは、外部公開せず127.0.0.1:5678:5678に寄せるのが無難である。 - TLSは証明書取得だけでなく、HTTPからHTTPSへの転送とn8n側の
https設定までセットで見るべきである。 - webhookは公開入口なので、ランダム性、認証、署名検証、レート制限を分けて考えるべきである。
- 502 Bad Gatewayは、Nginx設定より先にn8n本体の起動状態と待ち受けポートを確認すべきである。
- 長時間処理やファイルアップロードでは、Nginxのタイムアウトと容量上限を先に確認すべきである。
- RedditやSNSの未確認本文は、技術的な結論として扱うべきではない。
- 最後は公式ドキュメント、設定ファイル、実ログを突き合わせるのが近道である。
- https://www.reddit.com/r/n8n/comments/1jv6sj0/trouble_setting_up_n8n_behind_nginx_reverse_proxy/?tl=zh-hans
- https://github.com/n8n-io/n8n/issues/14653
- https://www.reddit.com/r/n8n/comments/1leruu0/struggling_to_serve_n8n_behind_nginx_reverse/?tl=zh-hans
- https://community.n8n.io/t/i-get-a-404-error-every-time-i-login-n8n-n8n/162532
- https://www.reddit.com/r/n8n/comments/1ilczzg/how_to_properly_set_up_n8n_behind_reverse_proxy/?tl=zh-hans
- https://www.virtua.cloud/learn/zh/tutorials/nginx-fan-xiang-dai-li-tls-bao-hu-n8n
- https://university.tenten.co/t/ubuntu-24-nginx-n8n/1931
- https://www.facebook.com/groups/n8ngroups/posts/1385355686475362/
- https://www.threads.com/@darrell_tw_/post/DJGmOuSRDri/%E7%A5%9E%E6%81%AD%E5%96%9C%E5%BE%8C%E4%BE%86%E8%A7%A3%E6%B1%BA%E7%9C%8B%E4%BE%86%E8%87%AA%E6%9E%B6%E7%9C%9F%E7%9A%84%E6%AF%94%E8%BC%83%E6%9C%83%E9%81%87%E5%88%B0%E9%80%99%E7%A8%AE%E5%A5%87%E5%A5%87%E6%80%AA%E6%80%AA%E7%9A%84%E5%95%8F%E9%A1%8C
- https://zhuanlan.zhihu.com/p/1888699981696849020
各サイト運営者様へ
有益な情報をご公開いただき、誠にありがとうございます。
感謝の意を込め、このリンクはSEO効果がある形で設置させていただいております。
※リンクには nofollow 属性を付与しておりませんので、一定のSEO効果が見込まれるなど、サイト運営者様にとってもメリットとなれば幸いです。
当サイトは、インターネット上に散在する有益な情報を収集し、要約・編集してわかりやすくお届けすることを目的としたメディアです。
引用や参照の方法に不備、あるいはご不快に感じられる点がございましたら、お問い合わせフォームよりご連絡ください。
今後とも、どうぞよろしくお願いいたします。


