Ich habe :
Apache
(v2.4) auf Port 80 meines Servers fürwww.domain1.com
, wobei mod_proxy und mod_proxy_wstunnel aktiviert sindnode.js + socket.io
auf Port 3001 desselben Servers.
Der Zugriff www.domain2.com
(mit Port 80) leitet dank der hier beschriebenen Methode zu 2. weiter . Ich habe dies in der Apache-Konfiguration festgelegt:
<VirtualHost *:80>
ServerName www.domain2.com
ProxyPass / http://localhost:3001/
ProxyPassReverse / http://localhost:3001/
ProxyPass / ws://localhost:3001/
ProxyPassReverse / ws://localhost:3001/
</VirtualHost>
Es funktioniert für alles, außer für den Websocket-Teil: Sie ws://...
werden nicht wie vom Proxy übertragen übertragen.
Wenn ich auf die Seite zugreife www.domain2.com
, habe ich:
Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.
Frage: Wie mache ich Apache-Proxy auch zu WebSockets?
RewriteCond %{QUERY_STRING} transport=websocket [NC]
hat bei mir nicht richtig funktioniert. Schlagen vor,RewriteCond %{HTTP:Upgrade} =websocket [NC]
stattdessen zu verwenden .Anstatt nach URL zu filtern, können Sie auch nach HTTP-Header filtern. Diese Konfiguration funktioniert für alle Webanwendungen, die Websockets verwenden, auch wenn sie nicht socket.io verwenden:
quelle
Kann nützlich sein. Nur alle Anfragen werden über ws an den Knoten gesendet
quelle
Ab Socket.IO 1.0 (Mai 2014) beginnen alle Verbindungen mit einer HTTP-Abfrageanforderung (weitere Informationen hier ). Das bedeutet, dass Sie zusätzlich zur Weiterleitung des WebSocket-Datenverkehrs alle
transport=polling
HTTP-Anforderungen weiterleiten müssen .Die folgende Lösung sollte den gesamten Socket-Verkehr korrekt umleiten, ohne anderen Verkehr umzuleiten.
Aktiviere die folgenden Apache2 Mods:
Verwenden Sie diese Einstellungen in Ihrer * .conf-Datei (z
/etc/apache2/sites-available/mysite.com.conf
. B. ). Ich habe Kommentare beigefügt, um jedes Stück zu erklären:Ich habe einen zusätzlichen Abschnitt zum Weiterleiten von
/node
Datenverkehr hinzugefügt , den ich als nützlich empfinde. Weitere Informationen finden Sie hier .quelle
RewriteRule /path/(.*)
Mit Hilfe dieser Antworten habe ich endlich einen Reverse-Proxy für Node-RED erhalten, der auf einem Raspberry Pi mit Ubuntu Mate und Apache2 ausgeführt wird. Dabei wurde diese Apache2-Site-Konfiguration verwendet:
Ich musste auch Module wie diese aktivieren:
quelle
Bei mir funktioniert es, nachdem nur eine Zeile in httpd.conf wie unten hinzugefügt wurde (fette Zeile).
Die Apache-Version ist 2.4.6 unter CentOS.
quelle
Mein Setup:
/api/ws
Stellen Sie, wie oben von @Basj erwähnt, sicher, dass a2enmod-Proxy und ws_tunnel aktiviert sind.
Dies ist ein Screenshot der Apache-Konfigurationsdatei, die mein Problem gelöst hat:
Der relevante Teil als Text:
Hoffentlich hilft das.
quelle
Führen Sie die folgenden Schritte für eine Federanwendung aus, auf der statische, Ruhe- und Websocket-Inhalte ausgeführt werden.
Der Apache wird als Proxy und SSL-Endpunkt für die folgenden URIs verwendet:
Apache-Konfiguration
Ich verwende dieselbe vHost-Konfiguration für die SSL-Konfiguration, ohne dass Proxy-bezogene Änderungen erforderlich sind.
Federkonfiguration
quelle
Verwenden Sie diesen Link für eine perfekte Lösung für ws https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html
Sie müssen nur unter Schritt tun ..
Gehe zu
/etc/apache2/mods-available
Schritt 1
Aktivieren Sie
mode proxy_wstunnel.load
mit dem folgenden BefehlSchritt 2
Gehe zu
/etc/apache2/sites-available
und fügen Sie die folgende Zeile in Ihre .conf-Datei innerhalb des virtuellen Hosts ein
Hinweis: 8080 bedeutet, dass Ihr Tomcat ausgeführt wird, da wir eine Verbindung herstellen möchten, für die
ws
unsere in Tomcat und Tomcat geputte War-Datei Apache bereitstelltws
. DankeMeine Konfiguration
quelle
Zum "Polling" -Transport.
Apache Seite:
Client-Seite:
quelle
Zusätzlich zur Hauptantwort: Wenn Sie mehr als einen Dienst auf demselben Server haben, der Websockets verwendet, möchten Sie diese möglicherweise mithilfe eines benutzerdefinierten Pfads (*) trennen :
Knotenserver:
Client-HTML:
Apache-Konfiguration:
(*) Hinweis: Die Verwendung der Standardeinstellung ist
RewriteCond %{REQUEST_URI} ^/socket.io
nicht spezifisch für eine Website, und Websockets-Anfragen werden zwischen verschiedenen Websites verwechselt!quelle
MACHEN:
Habe Apache 2.4 installiert (funktioniert nicht mit 2.2)
a2enmod proxy
unda2enmod proxy_wstunnel.load
Fügen Sie dazu in der Apache-Konfiguration
einfach zwei Zeilen in Ihre Datei ein, wobei 8080 Ihr Tomcat-Laufport ist
quelle