Node-RED跨子网访问页面加载提示服务器连接重置故障
Node-RED跨子网访问连接重置故障排查方案
故障核心特征已经排除系统层面、防火墙层面拦截:本地localhost、同子网访问正常,同服务器httpd服务跨子网访问正常,问题100%出在Node-RED自身配置、跨网传输的协议层适配两个维度,按以下顺序逐一定位即可:
- 检查Node-RED监听地址配置
定位Node-RED配置文件:- Linux默认路径:
~/.node-red/settings.js - Windows默认路径:
C:\Users\<当前登录用户名>\.node-red\settings.js
找到配置文件中uiHost字段,绝大多数该类故障都是这个字段被默认配置为绑定回环地址127.0.0.1,或者仅绑定了同子网对应网卡的IP,导致非本地、非同一子网的TCP连接到达时,会被内核直接返回RST包重置连接,这类重置不会被防火墙规则记录,所以排查防火墙时看不到拦截日志。
将该字段修改为uiHost: "0.0.0.0",保存配置后重启Node-RED服务,优先测试跨子网访问是否恢复。
- Linux默认路径:
- 校验WebSocket连接转发规则
Node-RED编辑器的实时状态同步、组件通信全依赖WebSocket协议,对应请求路径为/comms:跨子网传输路径上如果存在三层交换机、应用层网关、流量审计设备,默认规则通常不会放行HTTP协议升级为WebSocket的请求,会直接切断连接触发页面加载时的重置报错;如果Node-RED前端挂了httpd、Nginx类的反向代理,没有加载WebSocket转发模块时也会出现完全一致的报错。
排查时先打开浏览器开发者工具-网络面板,筛选WS类型请求,查看/comms路径的请求状态:如果是101协议切换失败,先给跨网路径上的网络设备放行对应Node-RED端口的WebSocket流量;如果是反向代理场景,给httpd加载mod_proxy_wstunnel模块并配置对应WebSocket转发规则即可。 - 校验跨源访问限制配置
在同一份settings.js配置文件中找到cors配置项,部分旧版本Node-RED默认会对请求来源IP做网段校验,仅放行回环地址、本地同子网的请求来源,跨子网请求会被应用层直接拒绝触发连接重置。可以临时将跨源配置修改为全放行做测试:
测试访问恢复后,再按需把origin配置调整为实际允许访问的跨子网网段,不要长期保持全放行配置。cors: { origin: "*" } - 排查跨网MTU值不匹配问题
如果以上配置都修改后故障依旧,大概率是跨子网转发路径上的网关接口、服务器网卡MTU值不匹配,大尺寸的TCP响应包被丢弃导致连接在页面加载过程中重置。可以临时把Node-RED服务器出口网卡的MTU值调整为1400测试:- Linux执行命令:
ifconfig <出口网卡名> mtu 1400 - Windows执行命令:
netsh interface ipv4 set subinterface "<出口网卡名>" mtu=1400 store=persistent
调整后如果访问恢复,逐段对齐服务器、网关各接口的MTU值即可彻底解决。
- Linux执行命令:
内容的提问来源于stack exchange,提问作者kopke
相关产品推荐
相关产品推荐

