解决 Unraid 中安装 n8n 遇到的“连接已丢失”的问题( Connection Lost 1008 )

unraid n8n Connection Lost 1008 geekmiao.com

问题描述:

当在unraid中使用docker方式安装了你n8n之后,通过 Nginx Proxy Manager 反向代理(或者cloudflare的零信任隧道)在外网访问这个服务时,在n8n的显示界面上部会显示:“连接已丢失”( Connection Lost )。n8n的docker后台日志通常不会报错,有些时候后台会报错1008。

问题分析:

 n8n 在 1.87+ 版本中加入了更严格的跨源(cross-origin)安全检查,特别是针对 WebSocket 端点,以防止跨源攻击。当代理没有正确处理 Host 和 Origin 头部时,就会触发这些检查,导致连接断开(Policy Violation, 代码 1008)。由于 Nginx Proxy Manager 在你的 Unraid 环境中,没有将 Host 和 Origin 这两个头部以 n8n 在版本 1.87+ 中期望的方式正确传递,从而触发了 n8n 的“策略违规”(错误代码 1008)。

解决办法

需要修改Nginx Proxy Manager的后台设置

1.打开n8n对应的Nginx Proxy Manager代理设置(Edit Proxy Host)

2.点击’高级‘(advance)选项,在Custom Nginx Configuration栏目中按照我的内容填写,注意,其中的内网地址要跟换为你的n8n在unraid中的内网地址,然后点击保存即可。

location / {
    # ... (保留你之前的 proxy_pass, proxy_http_version, Upgrade, Connection 头部) ...
    proxy_pass http://192.168.1.161:5678; # 确保正确-更换你的地址
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    # *** 新的 Host 和 Origin 头部设置 (不同变量) ***
    # 使用 $server_name 和 $server_port 变量
    proxy_set_header Host $host:$server_port; # 或者尝试 proxy_set_header Host $server_name;
    proxy_set_header Origin $scheme://$server_name:$server_port;

    # ... (保留其他设置,如 proxy_read_timeout 86400s, 禁用缓冲等) ...
    proxy_read_timeout 86400;
    proxy_buffering off;
    proxy_cache off;
    # 其他 X-Forwarded-* 头部可以暂时保留或移除,先测试 Host 和 Origin 固定值
    # 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;
}

总结来说,这个“连接已丢失”的问题,根本原因是 n8n 新版本中增强的跨源安全策略,要求代理在转发请求时,必须以特定的格式(包含端口的 Host 头部和完整的协议+域名+端口的 Origin 头部)传递 Host 和 Origin 信息。传统的 Nginx 变量或静态设置在特定代理环境(NPM on Unraid)下未能满足这一要求,导致 n8n 判定为“策略违规”(代码 1008)并断开连接。通过使用 $host:$server_port$scheme://$server_name:$server_port 变量,最终成功解决了头部转发问题。

USDT Icon
需支付 0.2 USDT 解锁内容

3.回到n8n界面刷新页面就不会有报错了。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注

目录