Попытка заставить Websockify / noVNC работать через обратный прокси-сервер


Я пытаюсь понять, как заставить noVNC работать через обратный прокси, и хотя он работает, если я подключаюсь непосредственно к нему, он не работает, если я пытаюсь изменить прокси.

А именно:

Я запускаю его как ./utils/launch.sh --vnc localhost:5901

Если я подключусь к нему как https://<machine>:6080/vnc.html?host=<machine>&port=6080

Он работает нормально, и я могу подключиться к сеансу vnc

Однако я хочу иметь возможность подключиться к нему через обратный прокси-сервер через порт 443.

В Apache 2.4.10 (-8 в Debian Jessie) я настроил свой прокси строка должна быть

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.

А в новнк я вижу сообщение об ошибке

127.0.0.1: ignoring socket not ready
1 2

1 ответ:

Оказывается, если кто-то хочет проксировать websockets через HTTPS-прокси, нужно сделать прокси-часть обычными websockets (ws://), а не защищенными web-сокетами (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
Сделайте это изменение, и все будет работать.