Docker部署的Node-RED通过Nginx反向代理无法访问求助
解决Node-RED反向代理访问报错问题
问题原因
当前Nginx配置会把/tools路径直接转发给Node-RED,但Node-RED默认在根路径/下提供服务,无法识别/tools路径,因此返回Cannot GET /tools错误。
解决方案一:修改Nginx配置(推荐,无需改动Node-RED)
调整location /tools块的配置,通过路径重写将请求转发到Node-RED的根路径,同时补充必要的代理头:
server { listen 80 default_server; listen [::]:80 default_server; server_name page.com; root /usr/share/nginx/html; include /etc/nginx/default.d/*.conf; location /tools { proxy_pass http://serverhostname:5322/; # 末尾添加斜杠 proxy_set_header Host $http_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; # 重写路径,去除/tools前缀 rewrite ^/tools(.*)$ $1 break; } }
说明:
proxy_pass末尾加斜杠,会把/tools后的路径追加到目标地址的根路径后rewrite规则将/tools/xxx转换为/xxx再转发给Node-RED- 额外的代理头能让Node-RED正确识别客户端来源信息
修改后重启Nginx生效:
sudo systemctl restart nginx
解决方案二:修改Node-RED服务路径
若不想改动Nginx,可调整Node-RED配置,让它直接在/tools路径下运行:
- 进入Node-RED容器:
docker exec -it nodered bash
- 编辑
/data/settings.js文件,找到httpAdminRoot配置项,修改为:
httpAdminRoot: '/tools',
- 保存文件后退出容器,重启Node-RED:
docker restart nodered
此时保持原有Nginx配置不变,访问http://page.com/tools即可正常进入UI。
验证
修改完成后,访问http://page.com/tools,确认Node-RED管理界面正常加载,同时检查页面内的CSS、JS等静态资源是否能正常获取,避免样式或功能异常。
内容的提问来源于stack exchange,提问作者Kelso
相关产品推荐
相关产品推荐

