web-dev-qa-db-fra.com

Proxy websocket wss: // à ws: // apache

j'ai cherché beaucoup mais je ne pouvais pas connecter mon Websocket à WSS: //, j'ai trouvé qu'il existe un moyen de proxy WSS: //domain.com: 9090 et Apache appliquer le proxy sur elle et rediriger la demande à où ws: //domain.com: le serveur 9090 est en cours d'exécution 

ProxyPass /websocket ws://domain.com:9090
ProxyPassReverse /websocket ws://domain.com:9090

ce code dans Apache config enverra la demande de toute adresse se terminant par/websocket à ws: //domain.com: 9090 ex: ws: // websocket sera ws: //domain.com: 9090

je veux le faire pour wss: // aussi ex wss: // websocket doit pointer sur ws: //domain.com: 9090

ça marche dosnt et j'obtiens cette erreur dans la console du navigateur:

failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

y a-t-il une erreur ici? merci.

4
Mohammad Ghmari

j'ai travaillé 24 heures pour trouver ceci et recherché beaucoup de forum mais personne n'écrit au sujet du succès . voici ma configuration de serveur:

CentOS version 6.7, Apache 4.2.18

voici ce que j’ai finalement fait: 2.4.5 et plus tard.

https://httpd.Apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

j'ai téléchargé https://archive.Apache.org/dist/httpd/httpd-2.4.18.tar.gz extrait httpd-2.4.18\modules\proxy\mod_proxy_wstunnel.c et téléchargé sur mon serveur racine alors du terminal pourrait le compiler à nouveau avec ces commonds:

chmod 755 mod_proxy_wstunnel.c #set permission
pxs -i -a -c mod_proxy_tunnel.c #compile module

la commande pxs a compilé le module et écrit dans le fichier de configuration Apache pour le charger

LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

après cela, j'ai ajouté ces lignes à la fin du fichier de configuration Apache:

RewriteEngine on
ProxyRequests Off
ProxyPreserveHost on
ProxyPass /myws ws://mysite.com:8091
ProxyPassReverse /myws ws://mysite.com:8091

ET MAINTENANT: cela fonctionne! Côté client js vous pouvez définir ws url comme ceci:

var protocol = 'ws://'; 
if (window.location.protocol === 'https:') {
            protocol = 'wss://';
   }

 var wsUri =protocol+ "mysite.com/myws";  

 var ws = new WebSocket(wsUri);

et il transmettra la demande à ws: //monsite.com: 8091 peu importe la page chargée avec https ou http, il dirigera toute demande terminée avec/myws vers ws: //monsite.com: 8091

9
Mohammad Ghmari

wss a besoin du module suivant Décommentez la ligne dans le fichier httpd.conf de Apache conf LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

1
Vinayak Shedgeri