【问题标题】:Trying to get Websockify/noVNC to work through a reverse proxy试图让 Websockify/noVNC 通过反向代理工作
【发布时间】:2014-12-31 13:31:31
【问题描述】:

我试图弄清楚如何让 noVNC 通过反向代理工作,虽然如果我直接连接到它可以工作,但如果我尝试反向代理它似乎不起作用。

即:

我以./utils/launch.sh --vnc localhost:5901 运行它

如果我以https://<machine>:6080/vnc.html?host=<machine>&port=6080 连接到它

它工作正常,我可以连接到 vnc 会话

但是,我希望能够通过端口 443 上的反向代理连接到它。

在 Apache 2.4.10(Debian Jessie 中的 -8)中,我已将代理行配置为

ProxyPass /home http://127.0.0.1:6080/
ProxyPassReverse /home http://127.0.0.1:6080/
ProxyPass /websockify wss://127.0.0.1:6080/websockify retry=3
ProxyPassReverse /websockify wss://127.0.0.1:6080/websockify retry=3

我以https://<machine>/vnc.html?host=<machine>&port=6080 连接到它

这仍然有效,因为当 html/javascript 的获取通过反向代理进行时,我仍然告诉 websocket 连接超过 6080 并且它有效。

但是,当我将其更改为 https://<machine>/vnc.html?host=<machine>&port=443

我得到 html/javascript 就好了,但是当它建立连接时,在 firefox(以及 chrome 和 IE,但这个错误是特定于 firefox)我很快得到

Firefox can't establish a connection to the server at wss://<machine>/websockify.

在 noVNC 中我看到了错误消息

127.0.0.1: ignoring socket not ready

【问题讨论】:

  • 这个动机的很大一部分是让我能够在“跳转主机”上保持一个 ssh 端口转发会话,并且 noVNC 只在 localhost 上监听,这样我就可以密码保护访问它。当我只能通过 443 访问它时,它甚至可以在受限环境中工作。

标签: apache google-chrome firefox websocket vnc


【解决方案1】:

事实证明,如果想通过 https 代理代理 websockets,则应该使代理部分正常 websockets (ws://) 不安全 web sockets (wss://),这是有道理的,因为 https 代理会有已经处理了 ssl 部分,没有什么可做的。

ProxyPass /websockify ws://127.0.0.1:6080/websockify retry=3
ProxyPassReverse /websockify ws://127.0.0.1:6080/websockify retry=3

进行更改,一切正常。

【讨论】:

  • 你确定 websocket 流在这个设置中是加密的,你有引用或者我可以验证的方法吗?我正在考虑将其用于 WAN,因此必须对所有内容进行加密。
  • 是的,apache 正在终止 ssl。否则它将无法正常工作,因为它与 apache 建立了 ssl 连接。
猜你喜欢
  • 2016-12-05
  • 2015-10-10
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多