AI PR

n8n_push_backendで接続切れ地獄を抜ける!sseとwebsocketの選び方まるわかりガイド

記事内に商品プロモーションを含む場合があります。 記載の情報は調査時点での情報です。最新情報は各公式サイトをご覧ください

n8nをセルフホストしていると、ワークフローエディタ右上に「Connection lost」と表示され、保存や編集が不安定になることがあります。その原因としてよく調べられているのが、N8N_PUSH_BACKEND、つまり検索されることの多い「n8n_push_backend」です。これは、n8nの画面とサーバーが状態更新をやり取りする方式を決める環境変数で、websocketまたはsseを指定できます。

この記事では、n8n公式ドキュメント、n8n Community、GitHub Issue、Cloudron Forum、OpenLiteSpeed Forum、Railwayの公開スレッドなどで確認できる情報をもとに、n8n_push_backendの意味、ssewebsocketの違い、リバースプロキシ・CDN・Cloudflare・Nginx・Railway・OpenLiteSpeed環境で起きやすい接続切れの整理、そして設定確認の順番までを、初めての人にもわかるようにまとめます。

この記事のポイント
✅ n8n_push_backendが何を変える環境変数なのかがわかる
✅ n8n_push_backend sseとwebsocketの使い分けがわかる
✅ Connection lostが出るときに見るべき設定がわかる
✅ Nginx・CDN・Railway・OpenLiteSpeed環境の注意点がわかる
本日のセール・タイムセールをまとめてチェックできます。

n8n_push_backendの基本と接続切れ対策

n8n_push_backendの基本と接続切れ対策
  1. n8n_push_backendの答えはUI更新方式をsseかwebsocketに切り替えること
  2. n8n_push_backend sseはWebSocketが通りにくい環境の回避策になること
  3. n8n_push_backend websocketは現在の標準寄りだがプロキシ設定が重要になること
  4. Connection lostの主因はn8n本体よりプロキシやOrigin不一致に寄りやすいこと
  5. NginxではUpgradeとConnectionヘッダーを通す設定が重要になること
  6. CDNやCloudflare配下ではOriginヘッダーとキャッシュ設定を疑うこと

n8n_push_backendの答えはUI更新方式をsseかwebsocketに切り替えること

n8n_push_backendの答えはUI更新方式をsseかwebsocketに切り替えること

n8n_push_backendを調べている人がまず知りたい答えは、かなりシンプルです。n8nでは、エディタ画面にサーバー側の変更や実行状況を届けるための「プッシュ通信」が使われます。その方式を選ぶ環境変数が、公式ドキュメント上の表記ではN8N_PUSH_BACKENDです。

n8n公式ドキュメントでは、N8N_PUSH_BACKENDについて、バックエンドがUIへ変更を送る方法をserver-sent events、つまりsseにするか、WebSockets、つまりwebsocketにするかを選ぶ項目として説明されています。デフォルト値は、調査時点の公式ドキュメントではwebsocketとされています。

参考:Deployment environment variables | n8n Docs
https://docs.n8n.io/hosting/configuration/environment-variables/deployment/

ここで大事なのは、N8N_PUSH_BACKENDは「ワークフローそのもののHTTPリクエスト処理」を直接変える設定ではないという点です。Cloudron Forumでも、スタッフが「ブラウザとバックエンド間の更新を制御するものではないか」という趣旨で整理しており、ワークフロー自体がWebSocketで動いているわけではない、という見方が示されています。

つまり、Connection lostが出たときにN8N_PUSH_BACKENDを触るのは有効な切り分けになりますが、すべての実行エラーを解決する魔法の設定ではありません。画面上の接続警告、エディタの保存状態、実行中表示、リアルタイム更新のような部分に関係しやすい設定として理解すると、かなり見通しがよくなります。

📌 n8n_push_backendの基本整理

項目 内容
正式な環境変数名 N8N_PUSH_BACKEND
よく検索される表記 n8n_push_backend
指定できる値 sse / websocket
公式ドキュメント上のデフォルト websocket
関係しやすい症状 エディタのConnection lost、UI更新不安定、push接続失敗
関係しにくいもの 外部APIへのHTTPリクエスト成功可否そのもの

最初に押さえるべき結論

状況 まず見ること
n8n画面だけがConnection lostになる N8N_PUSH_BACKENDとリバースプロキシ
WebSocketエラーがブラウザコンソールに出る websocket設定とプロキシのUpgrade
WebSocketがどうしても通らない N8N_PUSH_BACKEND=sseを試す
sseでも直らない Origin、Host、公開URL、プロキシホップを確認
長時間実行で落ちる メモリ不足やn8n再起動も確認

検索キーワードとしてはn8n_push_backendと小文字で入力されがちですが、Docker Composeや.envでは大文字のN8N_PUSH_BACKENDとして指定するのが基本です。環境変数は一般的に大文字で書かれるため、設定ファイルでは表記ミスに注意しましょう。

特に、GitHub IssueではN8N_PUSH_BACKEND=sselのような誤記も見られました。sseでもwebsocketでもない値を入れると、意図した切り替えにならない可能性があります。トラブル対応中は焦って入力ミスをしやすいため、まずは変数名と値を一文字ずつ確認するのがおすすめです。


n8n_push_backend sseはWebSocketが通りにくい環境の回避策になること

n8n_push_backend sseはWebSocketが通りにくい環境の回避策になること

n8n_push_backend sseと検索している人の多くは、WebSocketまわりでエラーが出ているはずです。sseはServer-Sent Eventsの略で、ざっくり言うと「サーバーからブラウザへ一方向にイベントを送る仕組み」です。WebSocketよりも単純な構造で、プロキシや一部のホスティング環境では通しやすいことがあります。

実際にn8n Communityでは、N8N_PUSH_BACKEND=sseを追加してConnection lostが改善したという投稿が確認できます。Docker runの例として、-e N8N_PUSH_BACKEND=sseを指定しているケースもありました。ただし、後続の投稿ではバージョンやプロキシ環境によってsseで直る場合と、websocketへ戻した方が直る場合が混在しています。

参考:Connection lost: You have a connection issue or the server is down – n8n Community
https://community.n8n.io/t/connection-lost-you-have-a-connection-issue-or-the-server-is-down-n8n-should-reconnect-automatically-once-the-issue-is-resolved/80999?page=3

sseの利点は、WebSocketのUpgrade処理に依存しにくいことです。WebSocketでは、HTTP接続をWebSocketへ切り替えるために、リバースプロキシがUpgradeConnectionヘッダーを正しく扱う必要があります。ここが崩れると、n8n本体が正常でもブラウザ側にはConnection lostが出ることがあります。

一方で、sseには注意点もあります。n8n Communityの投稿では、N8N_PUSH_BACKEND=sseを設定したあと、コラボレーション機能が無効になるというログが出た例がありました。ログ内容としては、pushが一方向に設定されているため、コラボレーション機能にはwebsocketを使うよう案内するものです。

📌 n8n_push_backend sseが向きやすい場面

場面 sseが候補になる理由
WebSocketがプロキシで失敗する Upgrade不要で通る可能性がある
OpenLiteSpeed配下でWebSocketが不安定 フォーラムでSSE回避例あり
CDNや特殊なプロキシを通している WebSocketより単純に扱える場合がある
まずConnection lostを止めたい 切り分けとして試しやすい
コラボレーション機能を重視しない 一方向pushでも運用できる可能性がある

🧩 sse設定例

形式 設定例
Docker run -e N8N_PUSH_BACKEND=sse
Docker Compose - N8N_PUSH_BACKEND=sse
.env N8N_PUSH_BACKEND=sse
Railwayなどの環境変数 キー:N8N_PUSH_BACKEND / 値:sse

ただし、sseは万能ではありません。n8n Communityの1.88.0関連スレッドでは、sseからwebsocketへ変更したら改善したという投稿もあります。つまり、Connection lostの原因が「WebSocketそのもの」ではなく、「公開URL」「Originヘッダー」「Hostヘッダー」「プロキシホップ」の不一致にある場合、sseだけでは解決しないことがあります。

そのため、N8N_PUSH_BACKEND=sseは「WebSocketが通らない環境での有力な回避策」と考えるのが現実的です。まずsseで症状が変わるかを見て、改善しない場合はURLやプロキシ設定へ進む、という順番がわかりやすいでしょう。


n8n_push_backend websocketは現在の標準寄りだがプロキシ設定が重要になること

n8n_push_backend websocketは現在の標準寄りだがプロキシ設定が重要になること

n8n_push_backend websocketと検索する人は、n8nのデフォルトや推奨設定が気になっているケースが多いでしょう。公式ドキュメントでは、N8N_PUSH_BACKENDのデフォルトはwebsocketとされています。WebSocketは、ブラウザとサーバーが双方向に通信する仕組みで、リアルタイム性が高いのが特徴です。

n8nのエディタでは、ワークフローの実行状況や保存状態など、画面側がリアルタイムに変わる場面があります。そのため、WebSocketは機能面では自然な選択肢です。n8n Communityでも、websocketに切り替えて解決したという報告が複数確認できます。

ただし、WebSocketはリバースプロキシとの相性が問題になりやすい通信方式です。Nginx、Nginx Proxy Manager、Synology、Traefik、CloudFront、ALB、OpenLiteSpeed、Railwayのように、n8nの前段に何かが挟まる構成では、ブラウザから見えるURLとn8nコンテナ内部のURLが異なることがよくあります。

その結果、n8n側が期待するOriginと実際のリクエストOriginがずれたり、WebSocketのUpgradeヘッダーが失われたりして、画面では「Connection lost」と表示されます。GitHub Issue #14572でも、CDN配下でWebSocketがcode=1008になり、Connection lostが点滅するような報告がありました。

参考:Connection lost when behind a CDN · Issue #14572
https://github.com/n8n-io/n8n/issues/14572

📌 websocketで重要な設定マトリクス

確認項目 重要な理由
N8N_PUSH_BACKEND=websocket WebSocket方式を明示する
proxy_http_version 1.1 WebSocket Upgradeに必要になりやすい
Upgradeヘッダー HTTPからWebSocketへ切り替える
Connectionヘッダー Upgrade要求を維持する
Hostヘッダー n8nが正しいホストを認識する
Originヘッダー n8nのOrigin検証に関係しやすい
N8N_PROXY_HOPS 何段プロキシの後ろかを伝える

🔧 websocketを使うときの代表的なNginx設定要素

設定
HTTPバージョン proxy_http_version 1.1;
Upgrade proxy_set_header Upgrade $http_upgrade;
Connection proxy_set_header Connection "upgrade";
Host proxy_set_header Host $host;
X-Forwarded-Proto proxy_set_header X-Forwarded-Proto $scheme;
キャッシュ回避 proxy_cache_bypass $http_upgrade;

n8n Communityでは、Nginx Proxy Managerを使っている場合は「Websockets Support」を有効にするだけで改善したという投稿も確認できます。手書きNginxではなく管理画面型のプロキシを使っている場合、まずはそのチェックボックスやWebSocket関連オプションを探すのが早いでしょう。

結論として、websocketはn8nの現在の標準寄りの選択肢ですが、前段のプロキシが正しくWebSocketを通すことが前提です。もし自分の環境がシンプルなDocker単体ならwebsocketで問題ない場合もありますが、公開URL、SSL終端、CDN、リバースプロキシを使っているなら、設定を丁寧にそろえる必要があります。


Connection lostの主因はn8n本体よりプロキシやOrigin不一致に寄りやすいこと

Connection lostの主因はn8n本体よりプロキシやOrigin不一致に寄りやすいこと

n8nのConnection lostを見ると、「n8nが壊れたのでは」と感じるかもしれません。しかし、調査した公開事例を見る限り、少なくともセルフホスト環境では、n8n本体よりも前段のプロキシ、CDN、Origin、Host、公開URL設定が原因になっているケースがかなり目立ちます。

n8n Communityの1.88.0スレッドでは、リバースプロキシを使っているかどうかを最初に確認するやり取りがあります。その後、WebSocketを許可する設定、HostとOriginヘッダーを通す必要性、N8N_PUSH_BACKEND=websocketへの変更などが話題になっています。つまり、単にn8nのバージョンだけでなく、通信経路全体を見る必要があります。

参考:1.88.0 connection lost loop on self-hosted version – n8n Community
https://community.n8n.io/t/1-88-0-connection-lost-loop-on-self-hosted-version/99560

特に最近のn8nでは、Originチェックが厳しくなっている可能性がうかがえる情報があります。Mediumの記事では、CloudFrontとALBの構成で、リクエストにOriginヘッダーがないためInvalid originが出ていたと説明されています。この記事では、CloudFront側でOriginヘッダーを追加したことで解決したとされています。

参考:Solve Self-hosted n8n Workflow Editor “Connection Lost”
https://medium.com/@cwentsai/n8n-v1-86-editor-connection-lost-issue-f320d62579cf

ここでいうOriginとは、ブラウザが「どのサイトからこのリクエストを送っているか」を示す情報です。たとえば、ユーザーがhttps://n8n.example.comでn8nを開いているなら、n8n側もそれに合ったOriginを受け取る必要があります。前段のCDNやプロキシがこの情報を落としたり、別の値にしたりすると、n8nが不正なアクセスと判断することがあります。

📌 Connection lostで疑う順番

優先度 確認対象 見る理由
ブラウザコンソール WebSocketかSSEか、Originかを見分ける
n8nログ Invalid originや再起動の有無を見る
リバースプロキシ WebSocket UpgradeやHostが通っているか
N8N_EDITOR_BASE_URL エディタの公開URLが正しいか
WEBHOOK_URL 公開URLとn8n内部URLのズレを減らす
N8N_PROXY_HOPS プロキシ配下であることをn8nに伝える
低〜中 N8N_PUSH_BACKEND ssewebsocketの切り替えで切り分ける

🧪 症状別の見立て表

症状 よくある原因候補
画面右上だけConnection lost push接続の失敗
ブラウザコンソールにwss失敗 WebSocket設定不足
Invalid originがログに出る Originまたは公開URLの不一致
一定時間後に落ちる メモリ不足やアプリ再起動も疑う
1.86では動くが1.88以降で不安定 プロキシ・Originチェック差分の可能性
sseでもwebsocketでも直らない URL、Host、Proxy hopsの見直しが必要

GitHub Issue #16707では、ssewebsocketの両方を試しても解決しないという報告もあります。これは、N8N_PUSH_BACKENDだけを変えても、根本がOriginやNginx設定にある場合は解決しにくいことを示しているように見えます。

したがって、Connection lost対策では「まずN8N_PUSH_BACKENDを変える」だけでなく、「n8nが外部からどう見えているか」をそろえることが重要です。内部では5678で動いていても、外部からはhttps://example.comの443番でアクセスしているなら、その差をn8nとプロキシの両方に正しく伝える必要があります。


NginxではUpgradeとConnectionヘッダーを通す設定が重要になること

NginxではUpgradeとConnectionヘッダーを通す設定が重要になること

Nginxを前段に置いてn8nを公開している場合、N8N_PUSH_BACKEND=websocketを使うなら、WebSocketのUpgradeを通す設定が重要です。n8n Communityでは、Nginx設定にproxy_http_version 1.1proxy_set_header Upgrade $http_upgradeproxy_set_header Connection "upgrade"などを追加して改善したという投稿が複数あります。

WebSocketは、最初はHTTPとして接続し、その後に「この接続をWebSocketへ切り替えたい」というUpgrade要求を送ります。Nginxがその要求をn8nへ渡さないと、ブラウザ側はwss://.../rest/pushへの接続に失敗し、n8nの画面ではConnection lostが表示されることがあります。

Nginx Proxy Managerの場合は、管理画面に「Websockets Support」のような項目があり、それを有効にするだけで改善したという投稿もありました。自分でconfを書く構成か、管理画面から設定する構成かで作業は変わりますが、見るべきポイントは共通しています。

参考:Connection lost: You have a connection issue or the server is down – n8n Community
https://community.n8n.io/t/connection-lost-you-have-a-connection-issue-or-the-server-is-down-n8n-should-reconnect-automatically-once-the-issue-is-resolved/80999?page=3

📌 Nginxでよく出てくる設定要素

設定 役割
proxy_pass n8n本体へリクエストを渡す
proxy_http_version 1.1 WebSocketで必要になりやすいHTTP/1.1を使う
proxy_set_header Upgrade $http_upgrade Upgrade要求をn8nへ渡す
proxy_set_header Connection "upgrade" 接続切り替えを維持する
proxy_set_header Host $host 元のホスト名をn8nへ伝える
proxy_set_header X-Forwarded-Proto $scheme http/httpsの外部プロトコルを伝える
proxy_buffering off SSEやリアルタイム通信で役立つことがある

🛠️ Nginx確認チェックリスト

チェック 状態
✅ WebSocket用ヘッダーを設定したか 未設定なら優先確認
proxy_http_version 1.1があるか ない場合は追加候補
Hostを渡しているか Origin検証に関係する可能性
X-Forwarded-Protoを渡しているか HTTPS終端時に重要
✅ キャッシュやバッファが邪魔していないか SSE/WebSocketで問題になることがある
✅ 設定後にNginxを再起動したか reload忘れに注意

注意したいのは、ネット上の設定例をそのまま貼っても、環境によっては動かないことです。たとえば、n8nコンテナ名、内部ポート、SSL終端の場所、Dockerネットワーク、CDNの有無によってproxy_pass先やヘッダーの意味が変わります。設定例は「部品」として見て、自分の構成に合わせて調整する必要があります。

また、N8N_PUSH_BACKEND=sseへ変更する場合でも、Nginx側のバッファリングやキャッシュが邪魔になることがあります。SSEはサーバーから少しずつイベントを流すため、プロキシがレスポンスを溜め込むと画面更新が遅れたり切れたりする可能性があります。一般的にはproxy_buffering offのような設定が話題になりますが、適用可否は環境に合わせて確認しましょう。


CDNやCloudflare配下ではOriginヘッダーとキャッシュ設定を疑うこと

CDNやCloudflare配下ではOriginヘッダーとキャッシュ設定を疑うこと

n8nをCDNやCloudflareの後ろに置いている場合、N8N_PUSH_BACKENDだけでなく、CDNがヘッダーやWebSocketをどう扱っているかを確認する必要があります。GitHub Issue #14572では、CDN配下でConnection lostが点滅し、ブラウザコンソールにWebSocket関連のエラーが出るという報告がありました。

CDNは本来、静的ファイルの配信やセキュリティ、SSL終端などに便利です。しかし、n8nのエディタのようにリアルタイム通信を使う画面では、CDNがヘッダーを変えたり、キャッシュを挟んだり、WebSocket接続を期待通りに通さなかったりすると、問題の原因になります。

Mediumの記事では、CloudFrontからオリジンへ送られるリクエストにOriginヘッダーがなく、n8n側でInvalid originになっていたと説明されています。このケースでは、CloudFrontのOrigin設定でヘッダーを追加したことで、WebSocketへ戻しても動いたとされています。

参考:Solve Self-hosted n8n Workflow Editor “Connection Lost”
https://medium.com/@cwentsai/n8n-v1-86-editor-connection-lost-issue-f320d62579cf

Cloudflareについては、n8n Communityで「Cloudflareを使っているならサブドメインのキャッシュを無効にすることが推奨される」という趣旨の投稿がありました。これは公式な万能手順というより、プロキシやCDNのキャッシュがリアルタイム通信の邪魔をする可能性があるため、切り分けとして妥当な見方です。

📌 CDN配下で見るべきポイント

確認対象 理由
WebSocket対応 CDNがwss接続を通す必要がある
Originヘッダー n8nのOrigin検証に関係しやすい
Hostヘッダー 公開ドメインとn8nの認識を合わせる
キャッシュ設定 /rest/pushなどをキャッシュしない
HTTPS終端 外部はhttps、内部はhttpのズレが起きやすい
N8N_PROXY_HOPS プロキシ段数をn8nへ伝える

🧭 CDNあり環境の切り分け手順

手順 内容
1 ブラウザコンソールでwss:///rest/pushの失敗を見る
2 n8nログにInvalid originがないか確認する
3 CDNを一時的にバイパスできるなら比較する
4 キャッシュを無効化または対象外にする
5 Origin/Hostヘッダーを明示的に渡す
6 websocketsseを切り替えて挙動を見る

Railwayの公開スレッドでも、プロキシ配下でn8nが外部URLを正しく認識できず、pushチャネルが失敗してConnection lostになったという説明があります。そこでは、N8N_EDITOR_BASE_URLWEBHOOK_URLN8N_HOSTN8N_PROTOCOLN8N_PROXY_HOPSなどを明示する対応が紹介されていました。

参考:My n8n is lost connection, please check why – Railway Central Station
https://station.railway.com/questions/my-n8n-is-lost-connection-please-check-5af6cbc5

CDN配下のConnection lostは、単に「sseにする」「websocketにする」だけでは解けないことがあります。公開URL、Origin、Host、プロキシ段数、キャッシュ、WebSocket対応を一つずつそろえることで、ようやく安定するケースがあると見た方がよいでしょう。

ふるさと納税のポイント付与は2025年10月に廃止になりました。

n8n_push_backendの実践設定と環境別チェック

CDNやCloudflare配下ではOriginヘッダーとキャッシュ設定を疑うこと
  1. DockerではN8N_PUSH_BACKENDを環境変数として明示すること
  2. RailwayなどPaaSでは公開URLとプロキシホップを合わせること
  3. OpenLiteSpeedではwebsocketが難しい場合にsseが現実的な回避策になること
  4. 長時間実行でConnection lostが出る場合はメモリ不足も疑うこと
  5. バージョンアップ後の接続切れは設定差分を順番に潰すこと
  6. 直らないときはブラウザコンソールとn8nログをセットで見ること
  7. 総括:n8n_push_backendのまとめ

DockerではN8N_PUSH_BACKENDを環境変数として明示すること

DockerではN8N_PUSH_BACKENDを環境変数として明示すること

Dockerでn8nを動かしている場合、N8N_PUSH_BACKENDは環境変数として指定します。Docker runなら-e N8N_PUSH_BACKEND=websocketまたは-e N8N_PUSH_BACKEND=sse、Docker Composeならenvironmentに追加するのが一般的です。

n8n Communityでは、Docker runの例として-e N8N_PUSH_BACKEND=sseを入れて改善した投稿がありました。一方で、1.88.0以降のConnection lostに関する別スレッドでは、N8N_PUSH_BACKEND=websocketにしたら直ったという投稿もあります。つまり、Dockerだからsse、Dockerだからwebsocketと決め打ちするより、前段のプロキシ環境に合わせて選ぶ必要があります。

Docker環境でよくあるのは、n8nコンテナは内部で5678番ポートを待ち受けているが、外部からはhttps://n8n.example.comでアクセスしている構成です。この場合、n8nにとっての内部URLとブラウザから見える公開URLが違います。このズレを放置すると、Connection lostの原因になることがあります。

そのため、N8N_PUSH_BACKENDだけでなく、N8N_EDITOR_BASE_URLWEBHOOK_URLN8N_HOSTN8N_PROTOCOLN8N_PROXY_HOPSなどもセットで確認するのが実務的です。特にSSLをNginxやCDNで終端している場合、n8n本体はHTTPで動いていても、外部からはHTTPSとして見えます。

📌 Docker Composeの確認項目

環境変数 目的
N8N_PUSH_BACKEND websocket / sse UI更新方式を指定
N8N_HOST n8n.example.com 外部ホスト名を指定
N8N_PROTOCOL https 外部から見えるプロトコル
N8N_EDITOR_BASE_URL https://n8n.example.com エディタの公開URL
WEBHOOK_URL https://n8n.example.com/ Webhookの公開URL
N8N_PROXY_HOPS 1 プロキシ配下であることを伝える

🧩 Docker runでの指定イメージ

目的 指定例
WebSocketを使う -e N8N_PUSH_BACKEND=websocket
SSEを使う -e N8N_PUSH_BACKEND=sse
公開URLを伝える -e N8N_EDITOR_BASE_URL=https://n8n.example.com
Webhook URLを伝える -e WEBHOOK_URL=https://n8n.example.com/
プロキシ配下を伝える -e N8N_PROXY_HOPS=1

注意点として、古い記事や投稿にはVUE_APP_URL_BASE_APIが出てくることがあります。公式ドキュメントでは、これはn8n-editor-uiパッケージを手動ビルドする場合に、フロントエンドがバックエンドAPIへ到達するための値として説明されています。通常のDocker利用で常に必要とは限らないため、現在の構成で本当に必要かは慎重に見た方がよいでしょう。

また、Dockerの環境変数を変えたら、コンテナの再作成や再起動が必要です。.envを書き換えただけで実際のコンテナに反映されていない、ということもよくあります。docker compose configdocker inspectなどで、実際に環境変数が入っているか確認できると安心です。


RailwayなどPaaSでは公開URLとプロキシホップを合わせること

RailwayなどPaaSでは公開URLとプロキシホップを合わせること

RailwayのようなPaaS環境では、アプリは内部ポートで動き、外部にはRailway側のプロキシを通してHTTPSで公開されます。この構成では、n8nが自分の外部URLを誤って認識すると、エディタのpush接続が失敗し、Connection lostが出ることがあります。

Railway Central Stationの公開スレッドでは、手動再デプロイ後に公開URLが明示されておらず、n8nが期待するOriginを誤って計算していたため、pushチャネルが失敗したという説明があります。対応として、N8N_EDITOR_BASE_URLWEBHOOK_URLN8N_HOSTN8N_PROTOCOLN8N_PROXY_HOPSPORTなどを明示する例が挙げられていました。

参考:My n8n is lost connection, please check why – Railway Central Station
https://station.railway.com/questions/my-n8n-is-lost-connection-please-check-5af6cbc5

ここで大切なのは、アプリ内部の待ち受けポートと、ユーザーがアクセスする外部ポートを混同しないことです。Railwayの例では、アプリは5678で待ち受けても、外部からはHTTPSの443番としてアクセスされます。そのため、N8N_PORT=443を無理に指定するのではなく、PaaS側の公開URLとアプリ側の待ち受け設定を分けて考える必要があります。

また、PaaSではプロキシが何段挟まっているかをn8nに伝えるために、N8N_PROXY_HOPS=1のような設定が役立つ場合があります。これは、リクエスト元やプロトコルを判断するときに、n8nがX-Forwarded-*系ヘッダーをどこまで信用するかに関係する設定と考えるとわかりやすいです。

📌 PaaS環境での設定観点

観点 確認内容
公開URL ブラウザで開くURLをN8N_EDITOR_BASE_URLへ反映
Webhook URL 外部サービスから届くURLをWEBHOOK_URLへ反映
ホスト名 N8N_HOSTを公開ドメインに合わせる
プロトコル 外部がHTTPSならN8N_PROTOCOL=https
ポート 内部待ち受けと外部公開ポートを混同しない
プロキシ N8N_PROXY_HOPSを検討する

🧭 Railway系トラブルの見立て

症状 見る場所
デプロイ後に急にConnection lost 環境変数が消えていないか
ログインはできるが編集画面が不安定 push接続とOrigin
URLを変えたあと不安定 N8N_EDITOR_BASE_URLWEBHOOK_URL
外部HTTPS、内部HTTP N8N_PROTOCOLとプロキシヘッダー
WebSocketが不安定 N8N_PUSH_BACKEND=sseも切り分け候補

PaaSの注意点は、管理画面上では環境変数を変えたつもりでも、PrimaryとWorkerの両方に反映されていない場合があることです。Railwayの投稿でも、PrimaryとWorkerの再デプロイという話が出ています。構成によっては、n8n本体だけでなくワーカー側の環境変数もそろえる必要があるかもしれません。

PaaSでは自由にNginx設定を触れないこともあります。その場合、N8N_PUSH_BACKEND=sseは現実的な回避策になることがあります。ただし、先ほどの通り、Originや公開URLが間違っている場合はsseだけでは直らない可能性があるため、URL系の設定を先にそろえるのが堅実です。


OpenLiteSpeedではwebsocketが難しい場合にsseが現実的な回避策になること

OpenLiteSpeedではwebsocketが難しい場合にsseが現実的な回避策になること

OpenLiteSpeedのリバースプロキシ配下でn8nを動かしている場合、WebSocket接続がうまくいかない事例が公開されています。OpenLiteSpeed Forumでは、wss://.../rest/pushへの接続で「Invalid WebSocket frame: RSV1 must be clear」というエラーが出るケースが投稿されていました。

このスレッドでは、OpenLiteSpeedを経由せずに:5678へ直接アクセスするとWebSocketが動く一方、OpenLiteSpeedを挟むと問題が出るという切り分けがされています。また、n8nのバージョンを1.86.1へ戻すと問題が出ないという情報もありました。ただし、バージョンダウンは根本的な解決というより回避策に近い可能性があります。

参考:WebSocket Not Connecting with n8n Behind OpenLiteSpeed Reverse Proxy
https://forum.openlitespeed.org/threads/websocket-not-connecting-with-n8n-behind-openlitespeed-reverse-proxy-docker-setup.7465/

同じスレッドでは、N8N_PUSH_BACKEND=sseを使うことで動作したという構成例が紹介されています。投稿者は、OpenLiteSpeedがWebSocket接続をブロックまたは圧縮しているように見える、と説明しています。これは推測を含む表現ですが、少なくとも実例として「OLS配下ではSSE回避が候補になる」と言えます。

OpenLiteSpeedでは、gzipやbrotliなどの圧縮、WebSocket有効化、ヘッダー追加、/rest/pushの扱いなど、複数の設定が関係します。Nginxに比べてn8n向けの情報が多いとは言いにくいため、最初からWebSocketにこだわりすぎると時間を使う可能性があります。

📌 OpenLiteSpeed環境の見立て

状況 対応候補
直接:5678では動く n8n本体よりOLS設定を疑う
OLS経由でwssが失敗 WebSocket設定や圧縮を確認
RSV1系のエラー 圧縮やフレーム処理の影響を疑う
WebSocketにこだわらない N8N_PUSH_BACKEND=sseを試す
コラボ機能が必要 WebSocket側の調整を継続検討

🧩 OLS配下でのSSE設定例の考え方

項目
Push方式 N8N_PUSH_BACKEND=sse
外部ホスト N8N_HOST=domain.com
外部プロトコル N8N_PROTOCOL=https
Webhook WEBHOOK_URL=https://domain.com/
プロキシ段数 N8N_PROXY_HOPS=1
Origin関連 N8N_CORS_ORIGINなども環境により検討

もちろん、OpenLiteSpeedでWebSocketがまったく使えないと断定はできません。設定次第で動く可能性はあります。ただ、公開事例を見る限り、短時間でConnection lostを止めたい場合は、N8N_PUSH_BACKEND=sseを試す価値は高いでしょう。

運用上、n8nのコラボレーション機能や双方向性が必要でなければ、SSEで安定させる選択も現実的です。一方で、チーム編集や将来的な機能を重視するなら、OLSのWebSocket設定を深掘りするか、NginxやTraefikなど実績の多いリバースプロキシへ寄せる判断もありえます。


長時間実行でConnection lostが出る場合はメモリ不足も疑うこと

長時間実行でConnection lostが出る場合はメモリ不足も疑うこと

N8N_PUSH_BACKENDやプロキシ設定ばかりを見ていると見落としがちですが、長時間実行中にConnection lostが出る場合は、n8nプロセス自体が落ちている可能性もあります。Cloudron Forumの事例では、WebSocket接続エラーの裏で、Node.jsのヒープメモリ不足によるクラッシュログが確認されていました。

このケースでは、ブラウザ側にはWebSocket connection failedのように見えていましたが、ログにはJavaScript heap out of memoryが出ており、n8nが再起動していたようです。最終的にNODE_OPTIONS=--max_old_space_size=8192を追加したことで解決したと投稿されています。

参考:n8n Web Socket Connection Failed | Cloudron Forum
https://forum.cloudron.io/topic/12968/n8n-web-socket-connection-failed

この事例からわかるのは、ブラウザに出るConnection lostやWebSocketエラーは、必ずしもWebSocket設定そのものだけが原因ではないということです。n8nプロセスがメモリ不足で落ちれば、当然ブラウザとの接続は切れます。その結果として、画面にはConnection lostが出ます。

特に、大量のHTTP Requestノード、大量データの処理、長時間のワークフロー実行、実行履歴の肥大化、大きなJSONデータの保持などがある場合、メモリを消費しやすくなる可能性があります。これは一般論ですが、n8nに限らずNode.jsアプリではヒープ上限に当たるとプロセスが落ちることがあります。

📌 メモリ不足を疑うサイン

サイン 内容
一定時間後に切れる 接続設定より負荷や再起動の可能性
n8nログにOOM heap out of memoryなど
実行中にn8nが再起動 コンテナログや監視で確認
大量データ処理をしている HTTP Requestやループ処理を確認
メモリグラフが上がり続ける リソース不足の可能性

🧪 Connection lostの原因切り分け表

原因候補 確認方法
WebSocket不通 ブラウザコンソールにwss失敗
Origin不一致 n8nログにInvalid origin
プロキシ設定不足 Nginx/OLS/CDN設定を見る
メモリ不足 n8nログにOOM、再起動履歴
アプリクラッシュ Docker logsやPaaS logs
バージョン差分 アップデート前後で比較

メモリ対策としてNODE_OPTIONS=--max_old_space_size=8192のような指定が紹介されていますが、これは環境のメモリ容量や運用方針に合わせて慎重に扱うべきです。サーバー自体に十分なメモリがないのに上限だけ上げても、別の問題につながるかもしれません。

また、根本対策としては、ワークフローを分割する、不要な大容量データを持ち回らない、実行データの保存設定を見直す、外部DBやキュー構成を検討する、といった方向もあります。この記事の主題はN8N_PUSH_BACKENDですが、長時間実行時のConnection lostでは「通信」と「プロセスの生存」を分けて確認することが大切です。


バージョンアップ後の接続切れは設定差分を順番に潰すこと

バージョンアップ後の接続切れは設定差分を順番に潰すこと

n8nのConnection lostに関する公開事例では、バージョンアップ後に問題が出たという話が目立ちます。n8n Communityでは、1.86.1以前では動いていたが1.88.0でConnection lostが出る、1.90系でNginx設定を追加した、1.99.1でも解決できない、など複数の投稿が確認できます。

ただし、これを「特定バージョンが悪い」と単純に断定するのは避けた方がよいです。バージョンアップによってWebSocketやOriginチェックまわりの挙動が変わった可能性はありますが、実際にはプロキシ、CDN、ヘッダー、公開URL、キャッシュなどの既存設定が、新しい挙動に合わなくなったと見る方が実務的です。

GitHub Issue #14572では、1.88.0でCDN配下のConnection lostが報告されています。n8n Communityでも、1.88.0の接続切れループに対して、WebSocket設定、Host、Originヘッダー、N8N_PUSH_BACKEND=websocketなどが話題になっています。

参考:1.88.0 connection lost loop on self-hosted version – n8n Community
https://community.n8n.io/t/1-88-0-connection-lost-loop-on-self-hosted-version/99560

バージョンアップ後の対応では、いきなり複数の設定を同時に変えない方が原因を特定しやすいです。まずブラウザコンソールを見る。次にn8nログを見る。そこからWebSocketエラーなのか、Originエラーなのか、アプリ再起動なのかを分けます。その上で、N8N_PUSH_BACKEND、プロキシ設定、公開URL設定の順に確認します。

📌 バージョンアップ後のチェック順

順番 確認内容
1 どのバージョンからどのバージョンへ上げたか
2 ブラウザコンソールのエラー
3 n8nログのエラー
4 リバースプロキシのWebSocket設定
5 N8N_PUSH_BACKENDの値
6 公開URL系の環境変数
7 CDN・Cloudflareのキャッシュやヘッダー
8 メモリ不足や再起動履歴

🧩 変更前後の比較メモ

比較項目 変更前 変更後
n8nバージョン 例:1.86.1 例:1.88.0以降
Push方式 未指定 / sse / websocket 現在値
プロキシ Nginx / Traefik / OLS 設定差分
CDN あり / なし キャッシュ設定
公開URL 旧URL 新URL
ログ エラーなし Invalid originなど

ダウングレードで一時的に直るケースもありますが、公開スレッドでは「以前のバージョンへ戻す必要は必ずしもない」という趣旨の投稿も見られます。特にリバースプロキシでWebSocketを正しく許可すれば解決するケースがあるため、まずは現在のバージョンに合わせて設定を整える方がよいでしょう。

もちろん、本番運用中で業務影響が大きい場合は、一時的に安定版へ戻す判断もありえます。ただし、その場合でも最終的にはプロキシ設定や公開URL設定を見直して、次回アップデートで同じ問題を繰り返さないようにするのが望ましいです。


直らないときはブラウザコンソールとn8nログをセットで見ること

直らないときはブラウザコンソールとn8nログをセットで見ること

N8N_PUSH_BACKEND=sseにしても直らない、websocketにしても直らない、Nginx設定を足しても直らない。こういうときは、闇雲に設定を増やすより、ブラウザコンソールとn8nログをセットで見るのが近道です。

ブラウザコンソールでは、wss://.../rest/pushへの接続失敗、code=1008Invalid WebSocket frame、SSE接続の失敗などが見えることがあります。n8nログでは、Invalid originOrigin header is missing、メモリ不足、再起動、設定の非推奨警告などが出ることがあります。片方だけを見ると、原因を誤解しやすくなります。

たとえば、Mediumの記事ではブラウザ側ではConnection lostに見えていましたが、n8nログにはOrigin header missingとInvalid originが出ていました。Cloudron Forumでは、ブラウザ側にはWebSocket失敗が出ていましたが、n8nログにはJavaScript heap out of memoryが出ていました。この2つは対応方法がまったく違います。

参考:n8n Web Socket Connection Failed | Cloudron Forum
https://forum.cloudron.io/topic/12968/n8n-web-socket-connection-failed

つまり、Connection lostは「結果」としての表示であり、原因は複数あります。原因を見ずにN8N_PUSH_BACKENDだけを何度も変えると、設定が増えて管理しづらくなります。まずはエラーの種類を分類し、その種類に合った対策を選ぶのが重要です。

📌 ログで見るべきキーワード

キーワード 考えられる方向
wss:// WebSocket接続の問題
/rest/push n8nのpush接続まわり
Invalid origin Originや公開URLの不一致
Origin header is missing CDNやプロキシがOriginを落としている可能性
heap out of memory メモリ不足
ECONNREFUSED n8n再起動中や接続先不通
code=1008 WebSocketのポリシー違反系の可能性

🧭 原因別の次アクション

原因の見立て 次にやること
WebSocket Upgrade不足 NginxやプロキシのWebSocket設定
Origin不一致 N8N_EDITOR_BASE_URL、Host、Originヘッダー
CDNが絡む キャッシュ除外、ヘッダー転送、CDNバイパス比較
PaaSプロキシ N8N_PROXY_HOPSと公開URL設定
OLSでwss失敗 N8N_PUSH_BACKEND=sseを試す
OOM メモリ設定やワークフロー分割

設定変更後は、n8nを再起動または再デプロイし、ブラウザもハードリロードするのがおすすめです。古いフロントエンド資産やキャッシュが残っていると、設定を変えたのに古い挙動に見えることがあります。CDNを使っている場合は、CDN側のキャッシュも疑いましょう。

また、トラブル対応の履歴をメモしておくと、後から戻しやすくなります。sseにした、websocketに戻した、NginxのUpgradeを追加した、Originを追加した、という変更を一つずつ記録しておけば、原因がわかったあとに余計な設定を整理できます。


総括:n8n_push_backendのまとめ

総括:n8n_push_backendのまとめ

最後に記事のポイントをまとめます。

  1. n8n_push_backendで検索される設定の正式名はN8N_PUSH_BACKENDである。
  2. N8N_PUSH_BACKENDはn8nのUI更新をsseまたはwebsocketで送る方式を選ぶ環境変数である。
  3. 公式ドキュメント上のデフォルトはwebsocketである。
  4. n8n_push_backend sseはWebSocketが通りにくい環境での回避策になる。
  5. n8n_push_backend websocketはリアルタイム性に向くが、リバースプロキシ設定が重要である。
  6. Connection lostはn8n本体の故障とは限らず、プロキシ、CDN、Origin、Hostの不一致でも起きる。
  7. NginxではUpgradeConnectionHostX-Forwarded-Protoなどのヘッダー確認が重要である。
  8. Nginx Proxy ManagerではWebsockets Supportの有効化が有効な場合がある。
  9. CDNやCloudflare配下ではOriginヘッダーとキャッシュ設定を確認するべきである。
  10. RailwayなどPaaSではN8N_EDITOR_BASE_URLWEBHOOK_URLN8N_HOSTN8N_PROTOCOLN8N_PROXY_HOPSをそろえることが重要である。
  11. OpenLiteSpeed配下でWebSocketが難しい場合、N8N_PUSH_BACKEND=sseが現実的な回避策になりうる。
  12. 長時間実行でConnection lostが出る場合、WebSocketではなくメモリ不足やn8n再起動が原因の場合もある。
  13. バージョンアップ後のConnection lostは、バージョンだけでなく既存のプロキシ設定との差分を見るべきである。
  14. 直らないときはブラウザコンソールとn8nログをセットで確認するべきである。
  15. ssewebsocketのどちらが正解かは環境次第であり、症状に合わせて切り替えて検証することが重要である。

記事作成にあたり参考にさせて頂いたサイト

各サイト運営者様へ
有益な情報をご公開いただき、誠にありがとうございます。
感謝の意を込め、このリンクはSEO効果がある形で設置させていただいております。
※リンクには nofollow 属性を付与しておりませんので、一定のSEO効果が見込まれるなど、サイト運営者様にとってもメリットとなれば幸いです。
当サイトは、インターネット上に散在する有益な情報を収集し、要約・編集してわかりやすくお届けすることを目的としたメディアです。
私たちは、情報の収集や整理を通じて「情報をまとめてわかりやすく伝える」という形で新たな価値を提供できるのではないかと考え、運営しております。
なお、引用や参照の方法には不備、あるいはご不快に感じられる点がございましたら、迅速に対応いたしますので、お手数ですがお問い合わせフォームよりご連絡いただければ幸いです。
今後とも、どうぞよろしくお願いいたします。

ABOUT ME
カシワギ
『エグゼクティブワーク』編集長のカシワギです。 普段はITベンチャーで執行役員の40代男です。 元コンサルタントですが、今はテクノロジー企業で日々奮闘中。 仕事では厳しい顔をしていますが、家では小学生の子供2人のやんちゃなパパ。 休日はゴルフに行ったり、妻とワインを楽しんだり。
当サイトについて

当サイトでは、インターネット上に散らばるさまざまな情報を収集し、AIを活用しながら要約・編集を行い、独自の切り口で見解を交えながらわかりやすい形でお届けしています。

情報の整理・編集にあたっては、読者やオリジナル記事の筆者へご迷惑をおかけしないよう、細心の注意を払って運営しておりますが、万が一、掲載内容に問題がある場合や修正・削除のご要望がございましたら、どうぞお気軽にお問い合わせください。
迅速に対応をさせていただきます。

その際には、該当記事の URLやタイトルをあわせてお知らせいただけますと、より速やかに対応 することができますのでそちらもご協力いただけますと大変幸いでございます。

今後とも当サイトをよろしくお願いいたします。