Angular CLI代理:将不安全的本地websocket重定向到安全的远程websocket

问题描述 投票:0回答:1

我正在尝试通过Web套接字通过反向代理建立MQTT连接。是否可以配置Angular CLI代理以将请求转发到ws://localhost:4200/mqttwss://mqtt.example.com/mqtt

我一直在尝试多个configurations,但似乎无法使其正常工作。这是我的proxy.conf.json中的内容:

"/mqtt/*": {
  "target": "wss://mqtt.example.com/",
  "secure": false,
  "ws": true,
  "changeOrigin": true,
  "logLevel": "debug"
}

我尝试了各种组合,使用secure和/或changeOrigin设置为true或false,但我无法连接。

使用"secure": false, "ws": true, "changeOrigin": true,"secure": true, "ws": true, "changeOrigin": true,我总是得到:

WebSocket握手期间的错误:意外的响应代码:502

更新

我更改了代理定义以省略changeOrigin选项,并将/mqtt附加到目标:

"/mqtt": {
  "target": "wss://mqtt.example.com/mqtt",
  "secure": false,
  "ws": true,
  "logLevel": "debug"
},

现在得到不同的错误消息:

WebSocket握手期间的错误:意外的响应代码:404

我的问题是,我看不到Angular CLI正在发送到远程服务器的确切请求,我已经将logLevel设置为debug,但是没有提供任何有用的输出来诊断问题。如果我可以看到代理服务器对远程服务器发出的确切请求,调试它将非常有帮助。

更新2

绝对没有必要在目标中包含/mqtt,因为这样我最终在代理提出的最终请求中以/mqtt/mqtt结尾。

进一步调试,我在Kubernetes Ingress控制器中发现以下错误消息:

上游从上游读取响应标头时过早关闭连接,

但是,当我使用本地MQTT客户端(MqttBox)直接连接到安全Websocket时,该连接有效,因此我仍然认为上游配置不是问题,而是代理连接中引入了一些问题。

webpack websocket angular-cli mqtt reverse-proxy
1个回答
1
投票

这是可能的;以下配置适用于eclipse test server

"/wss": {
    "target": "https://mqtt.eclipse.org:443/mqtt",
    "secure": false,
    "ws": true
},

note: https://mqtt.eclipse.org:443/mqttwss://mqtt.eclipse.org:443/mqtt都可以正常工作。

通过这种配置,我可以使用Paho JS MQTT Client进行连接(和订阅/发布等):

paho js mqtt client screenshot

我不确定您的配置有什么问题,但怀疑"target": "wss://mqtt.example.com/"应该为"target": "wss://mqtt.example.com/mqtt"(但这可能仅是由于您如何匿名化数据?)。希望在测试服务器上进行尝试可以为您指明正确的方向(我假设您已经检查了代理是否可以在标准http页面上使用。)>

© www.soinside.com 2019 - 2024. All rights reserved.