J'ai utilisé WebSockify dans mon application Web pour me connecter au serveur VNC en utilisant noVNC pour permettre l'accès à distance aux serveurs Linux via le navigateur. C'était une implémentation facile car il n'y avait pas de pare-feu impliqué et le port WebSocket était ouvert. Cependant, récemment, j'ai dû migrer vers un autre serveur qui était derrière un pare-feu et je ne voulais pas ouvrir le port car cela pourrait mettre en danger l'ensemble du système. Dans cet article, nous allons implémenter WebSockify via Apache Reverse Proxy.
Qu'est-ce qu'un noVNC ?
noVNC est un client HTML pour VNC. En utilisant noVNC, vous pouvez vous connecter à un serveur VNC à partir d'un navigateur.
Pourquoi WebSockify ?WebSockify traduit le trafic WebSockets en trafic socket normal. Websockify accepte la poignée de main WebSockets, l'analyse, puis commence à transférer le trafic entre le client et la cible dans les deux sens.
Photo courtoisie :datawookie.dev
Hypothèse:Il est supposé que votre WebSockify et le serveur Web Apache s'exécutent sur le même hôte.
Configuration :
- Apache v2.4
- WebSockify pour WebSockets sur le port 6080
- pas de VNC installé
- serveur distant exécutant VNC
- CentOS Linux 7.9
Remarque : Nous n'entrerons pas dans les détails sur la configuration de WebSockify avec noVNC &VNC.
Configurer le proxy inverse Apache pour les Websockets
Étape 1 : Assurez-vous que les modules ci-dessous sont activés dans Apache /etc/httpd/conf.modules.d/
dossier.
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
Étape 2 : Créez un VirtualHost avec les règles ReverseProxy et Rewrite comme ci-dessous :
URL de l'application WebsockifyWebSockify s'exécute sur le port 6080 et est accessible via l'url :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>
Étape 3 : Redémarrez le serveur Web Apache
# systemctl restart httpd