n8n 使用nginx 在公网上部署,现在进入工作流一直连接已丢失!如何解决?

n8n 工作流界面持续显示 "Connection lost" 的核心原因是 Nginx 未正确配置 WebSocket 支持或 Origin 头验证失败 ,尤其在公网部署且使用非标准端口(如非 443/80)时,n8n 1.87+ 版本对 Origin 头的校验更严格,需显式设置 不带端口号的 Origin 值。以下是具体解决方案:


一、关键问题定位

1. WebSocket 连接未启用

n8n 工作流编辑器依赖 WebSocket 实时通信(如调试日志流),若 Nginx 未透传相关协议头,会导致连接中断。
典型错误表现

  • 浏览器控制台报错 WebSocket connection to 'wss://...' failed
  • 网络请求中显示 Invalid origin! 错误(常见于 n8n 1.87+ 版本)。

2. Origin 头校验失败(高发原因)

当公网访问域名包含非标准端口 (如 https://your-domain.com:8443)时:

  • n8n 会校验请求头中的 Origin 是否与配置的域名完全匹配不含端口号)。
  • 若 Nginx 未显式设置 Origin 头,或动态使用 $host(含端口),则校验失败。

二、Nginx 配置修正步骤

1. 基础 WebSocket 支持配置

在 Nginx 的 location / 块中必须包含以下指令

复制代码
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
  • 作用:启用 WebSocket 协议升级,确保实时通信正常。
  • 错误配置后果:前端无法建立长连接,持续触发 "Connection lost"。

2. 关键:修复 Origin 头校验问题

场景:使用非标准端口(如 8443)访问

硬编码 HostOrigin禁止使用 $host 动态变量

复制代码
proxy_set_header Host your-domain.com;          # 不带端口号
proxy_set_header Origin https://your-domain.com; # 必须为 HTTPS 且不带端口号
  • 为什么必须硬编码?
    n8n 1.87+ 版本会严格比对 Origin 与内部配置的域名(通过 N8N_HOST 环境变量定义),若请求中的 Origin 包含端口号(如 https://your-domain.com:8443),而 n8n 配置的域名不含端口,则校验失败。
  • 错误示例
    proxy_set_header Origin $scheme://$host; → 会携带端口号,导致校验失败。
场景:标准 HTTPS 端口(443)

仍需显式设置:

复制代码
proxy_set_header Host your-domain.com;
proxy_set_header Origin https://your-domain.com; # 不带端口号

三、完整 Nginx 配置示例

复制代码
server {
    listen 443 ssl http2;
    server_name your-domain.com; # 替换为实际域名

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:5678; # 指向 n8n 容器/服务地址
        proxy_set_header Host your-domain.com;          # 硬编码域名(无端口)
        proxy_set_header Origin https://your-domain.com; # 硬编码 HTTPS 域名(无端口)
        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;

        # WebSocket 必备配置
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

重点检查项

  • HostOrigin必须不带端口号,即使实际通过非标准端口访问。
  • Origin 值必须与 n8n 的 N8N_HOST 环境变量完全一致 (例如 N8N_HOST=your-domain.com)。

四、其他必要验证

1. n8n 环境变量检查

确保以下环境变量已正确设置:

  • N8N_HOST=your-domain.com不带协议和端口
  • N8N_PROTOCOL=https
  • WEBHOOK_URL=https://your-domain.com/结尾必须带斜杠

2. 服务端日志排查

若问题仍存在,检查 n8n 日志中的关键错误:

复制代码
docker logs n8n-container-name | grep -i "origin\|websocket"
  • 若出现 Origin header does NOT match,说明 Origin 头配置错误。
  • 若出现 WebSocket connection closed,需复查 Nginx 的 WebSocket 头配置。

五、常见误区

  1. 仅配置 proxy_set_header Host $host 不够
    $host 会携带端口号(如 your-domain.com:8443),而 n8n 要求 Origin 必须无端口
  2. 误用 X-Forwarded-Port 替代 Origin
    X-Forwarded-Port 仅用于协议识别,不影响 Origin 校验
  3. 忽略 n8n 版本差异
    1.87 以下版本可能无需显式设置 Origin,但 1.87+ 版本必须严格匹配

按上述配置修正后,WebSocket 连接将正常建立,工作流编辑器的 "Connection lost" 错误会消失。若仍存在问题,请优先检查 Origin 头值是否与 N8N_HOST 完全一致

相关推荐
Smartdaili China2 小时前
OpenClaw赋能AI智能体:实时联网与网页抓取
人工智能·爬虫·ai·爬取·openclaw·open claw
运维栈记2 小时前
API Error: 400 Request body format invalid
linux·ai
实在智能RPA2 小时前
AI Agent在制造业预测性维护上的算法精度怎样验证?深度拆解2026工业智能体实测表现
人工智能·ai
我是大AI2 小时前
搜极星 GEO:让 AI 精准推荐,品牌不再隐形
大数据·人工智能·ai
Agent手记4 小时前
电信运营商如何用AI实现携号转网自动处理?基于实在Agent的业务自动化落地与TARS大模型解析方案
运维·人工智能·ai·自动化
实在智能RPA4 小时前
AI Agent是否能处理医药研发数据中多种格式的文档?深度解析2026年智能体在生物医药领域的应用边界
人工智能·ai
创世宇图5 小时前
Claude Opus 4.8 深度实测:动态多 Agent 协同、Effort Control 与幻觉抑制的工程化解析
ai·llm·agent·claude·ai工程化
徐云夏5 小时前
使用docker运行dify制作客服、运维助手
ai
Elastic 中国社区官方博客5 小时前
Elastic 线下 Meetup 将于 2026 年 7 月 26 号下午在深圳举行
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
weixin_468466855 小时前
千问大模型在阿里生态中的实战应用指南
大数据·人工智能·深度学习·ai·大模型·智能交互·自动应答