J'ai :
Apache
(v2.4) sur le port 80 de mon serveur pourwww.domain1.com
, avec mod_proxy et mod_proxy_wstunnel activésnode.js + socket.io
sur le port 3001 du même serveur.
L'accès www.domain2.com
(avec le port 80) redirige vers 2. grâce à la méthode décrite ici . J'ai défini ceci dans la configuration Apache:
<VirtualHost *:80>
ServerName www.domain2.com
ProxyPass / http://localhost:3001/
ProxyPassReverse / http://localhost:3001/
ProxyPass / ws://localhost:3001/
ProxyPassReverse / ws://localhost:3001/
</VirtualHost>
Cela fonctionne pour tout, sauf pour la partie websocket: ws://...
ne sont pas transmis comme il se doit par le proxy.
Lorsque j'accède à la page sur www.domain2.com
, j'ai:
Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.
Question: Comment créer un proxy Apache pour les WebSockets également?
RewriteCond %{QUERY_STRING} transport=websocket [NC]
ne m'a pas fonctionné correctement. Suggérant d'utiliser à laRewriteCond %{HTTP:Upgrade} =websocket [NC]
place.Au lieu de filtrer par URL, vous pouvez également filtrer par en-tête HTTP. Cette configuration fonctionnera pour toutes les applications Web qui utilisent des websockets, même si elles n'utilisent pas socket.io:
la source
Peut être sera utile. Toutes les requêtes sont envoyées via ws au nœud
la source
Depuis Socket.IO 1.0 (mai 2014), toutes les connexions commencent par une requête d'interrogation HTTP (plus d'informations ici ). Cela signifie qu'en plus du transfert du trafic WebSocket, vous devez transférer toutes
transport=polling
les requêtes HTTP.La solution ci-dessous doit rediriger correctement tout le trafic de socket, sans rediriger aucun autre trafic.
Activez les mods Apache2 suivants:
Utilisez ces paramètres dans votre fichier * .conf (par exemple
/etc/apache2/sites-available/mysite.com.conf
). J'ai inclus des commentaires pour expliquer chaque pièce:J'ai inclus une section supplémentaire pour le routage du
/node
trafic que je trouve pratique, voir ici pour plus d'informations.la source
RewriteRule /path/(.*)
Avec l'aide de ces réponses, j'ai finalement obtenu un proxy inverse pour Node-RED fonctionnant sur un Raspberry Pi avec Ubuntu Mate et Apache2 fonctionnant, en utilisant cette configuration de site Apache2:
J'ai également dû activer des modules comme celui-ci:
la source
Pour moi, cela fonctionne après avoir ajouté une seule ligne dans httpd.conf comme ci-dessous (ligne en gras).
La version Apache est 2.4.6 sur CentOS.
la source
Ma configuration:
/api/ws
Comme mentionné ci-dessus par @Basj, assurez-vous que le proxy a2enmod et ws_tunnel sont activés.
Voici une capture d'écran du fichier de configuration Apache qui a résolu mon problème:
La partie pertinente sous forme de texte:
J'espère que cela pourra aider.
la source
A fait ce qui suit pour une application Spring exécutant du contenu statique, repos et websocket.
Apache est utilisé comme proxy et point de terminaison SSL pour les URI suivants:
Configuration Apache
J'utilise la même configuration vHost pour la configuration SSL, pas besoin de changer quoi que ce soit lié au proxy.
Configuration du ressort
la source
Utilisez ce lien pour la solution parfaite pour ws https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html
Vous devez simplement faire ci-dessous l'étape ..
Aller à
/etc/apache2/mods-available
Étape 1
Activer
mode proxy_wstunnel.load
en utilisant la commande ci-dessousÉtape 2
Aller à
/etc/apache2/sites-available
et ajoutez la ligne ci-dessous dans votre fichier .conf à l'intérieur de l'hôte virtuel
Remarque: 8080 signifie que vous utilisez votre port tomcat car nous voulons nous connecter
ws
là où notre fichier War mis dans tomcat et tomcat sert apache pourws
. MerciMa configuration
la source
Pour le transport "polling".
Côté Apache:
Côté client:
la source
En plus de la réponse principale: si vous avez plus d'un service sur le même serveur qui utilise des websockets, vous pouvez le faire pour les séparer, en utilisant un chemin personnalisé (*):
Serveur de nœud:
HTML du client:
Config Apache:
(*) Remarque: l'utilisation de la valeur par défaut
RewriteCond %{REQUEST_URI} ^/socket.io
ne serait pas spécifique à un site Web, et les requêtes Websockets seraient mélangées entre différents sites Web!la source
FAIRE:
Avoir Apache 2.4 installé (ne fonctionne pas avec 2.2),
a2enmod proxy
eta2enmod proxy_wstunnel.load
Faites cela dans la configuration Apache,
ajoutez simplement deux lignes dans votre fichier où 8080 est votre port en cours d'exécution tomcat
la source