Die Verwendung von go-websocket hinter Apache mod_proxy_wstunnel
Hinweis: config Aktualisiert und Hinzugefügt trailing slash websocket-Pfad. Immer noch gleiche problem
Ist es möglich, go-websocket - hinter einem Apache reverse-proxy mit mod_proxy_wstunnel?
Ich habe versucht, und scheiterte, um die Dinge zu arbeiten.
Habe ich versucht zu verwenden das Chat-Beispiel hinter einem Apache reverse-proxy (mit mod_proxy_wstunnel aktiviert). Und es funktioniert nicht. Der proxy ist ein Erfolg, während die websocket-Teil funktioniert überhaupt nicht.
Meine Apache config sieht wie folgt aus:
<VirtualHost *:80>
DocumentRoot /var/www/foobar
ServerName foobar.com
ProxyPass /http://localhost:8080/
ProxyPassReverse /http://localhost:8080/
ProxyPass /ws/ws://localhost:8080/ws/
ProxyPassReverse /ws/ws://localhost:8080/ws/
ErrorLog logs/error_log-foobar
CustomLog logs/access_log-foobar common
LogLevel debug
</VirtualHost>
Und natürlich bin ich mit dem chat-server auf port 8080. Getestet hab ich es mit SSH-tunnel, und Dinge, die perfekt funktionieren. Dann wechselte ich zu Apache.
Das erste mal habe ich versucht, die javascript-Konsole beschwert sich dieser:
NetworkError: 403 Forbidden - http://foobar.com/ws/
Die Anforderung scheint zu sein, dass Sie auf die Herkunft zu überprüfen.
Dann versuchte ich erneut, nach dem Kommentar des Ursprungs schauen, es dieses:
NetworkError: 400 Bad Request - http://foobar.com/ws/
Scheint es den chat-server nicht bekommen, die upgrade-Anfrage an alle.
Wie soll ich das Debuggen?
Wo sollte ich mit der Suche beginnen?
- Funktioniert der trailing-slash
/
egal? Nur eine Vermutung.... - Nein. Ich denke nicht. Ich habe gerade versucht, die add trailing slash alles. Das problem ist immer noch das gleiche.
- Ich kann mir vorstellen, beide Server anmelden, was sagen Sie?
- httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass sagt, dass
ProxyPass
Richtlinien sind aufeinander abgestimmt, damit Sie Ihre/ws/
ist wahrscheinlich überschattet von/
ein. Bekommen Sie ein anderes Verhalten, wenn Sie die Reihenfolge ändern? - Danke! Die Reihenfolge ist nicht egal.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mit Go sichere WebSocket ("wss://) server hinter dem Apache-2.4.18 auf CentOS 7. Hier sind die Einstellungen:
Sicherzustellen, dass das system hat mod_proxy_wstunnel:
# find /usr/lib64/httpd/modules/| grep ws
Fügen Sie die folgende Zeile in 00-proxy.conf:
# vim /etc/httpd/conf.Module.d/00-proxy.conf
Den Apache Neu Starten:
# systemctl restart httpd
Überprüfen Sie die Einstellung:
# httpd -M | grep -iE 'proxy'
Edit httpd-vhosts.conf:
# vim /etc/httpd/conf.d/httpd-vhosts.conf
Vielen Dank an alle! Nach der Einnahme mehrere Hinweise oben, ich habe die Lösung gefunden.
Und für jemanden, der vielleicht ähnliches Problem hat, hier die Lösung zu meiner Frage:
Als Aralo vorgeschlagen, bei der nachgestellten Schrägstrich Hinzugefügt werden müssen, um die WebSocket-Pfad (in meinem Fall: "/ws/"). Es sieht Apache wird nur mit WebSocket mit einem gültigen GET-Anforderung.
James Henstridge richtig war. Die Reihenfolge der ProxyPass-relevant. ProxyPass der /ws/muss gestellt werden, bevor der /line.
Nach Rücksprache mit dem Chat-Beispiel code, ich fand eine Herkunfts-check in der Funktion ServeWs() und entfernt.
Alles funktioniert jetzt.
Und Dank covener, Protokolle Lesen hilft.