Ich habe WebSockify in meiner Webanwendung verwendet, um mit noVNC eine Verbindung zum VNC-Server herzustellen, um den Fernzugriff auf Linux-Server über den Browser zu ermöglichen. Es war eine einfache Implementierung, da keine Firewall beteiligt war und der WebSocket-Port geöffnet war. Kürzlich musste ich jedoch auf einen anderen Server migrieren, der sich hinter einer Firewall befand, und ich wollte den Port nicht öffnen, da dies das gesamte System gefährden könnte. In diesem Artikel implementieren wir WebSockify über Apache Reverse Proxy.
Was ist noVNC?
noVNC ist ein HTML-Client für VNC. Mit noVNC können Sie von einem Browser aus eine Verbindung zu einem VNC-Server herstellen.
Warum WebSockify?WebSockify übersetzt WebSockets-Datenverkehr in normalen Socket-Datenverkehr. Websockify akzeptiert den WebSockets-Handshake, analysiert ihn und beginnt dann mit der Weiterleitung des Datenverkehrs zwischen dem Client und dem Ziel in beide Richtungen.
Bild mit freundlicher Genehmigung:datawookie.dev
Annahme:Es wird davon ausgegangen, dass sowohl Ihr WebSockify als auch der Apache-Webserver auf demselben Host ausgeführt werden.
Einrichtung:
- Apache v2.4
- WebSockify für WebSockets auf Port 6080
- kein VNC installiert
- Remote-Server mit VNC
- CentOS Linux 7.9
Hinweis: Wir werden nicht im Detail darauf eingehen, wie WebSockify mit noVNC &VNC konfiguriert wird.
Apache Reverse Proxy für Websockets konfigurieren
Schritt 1: Stellen Sie sicher, dass die folgenden Module in Apache /etc/httpd/conf.modules.d/
aktiviert sind Ordner.
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so LoadModule rewrite_module modules/mod_rewrite.so
Schritt 2: Erstellen Sie wie folgt einen VirtualHost mit ReverseProxy- und Rewrite-Regeln:
Websockify-Anwendungs-URLWebSockify läuft auf Port 6080 und ist über die URL erreichbar:https://localhost:6080
<VirtualHost *:80> ServerName techglimpse.com ProxyRequests on RequestHeader set X-Forwarded-Proto "http" ProxyPass /console https://localhost:6080/ ProxyPassReverse /console https://localhost:6080/ RewriteEngine on RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC] RewriteRule .* ws://localhost:6080%{REQUEST_URI} [P] </VirtualHost>
Schritt 3: Starten Sie den Apache-Webserver neu
# systemctl restart httpd