2015-12-23 17 views
7

Ich versuche, Proxygen mit Apache einzurichten, um socket.io in meiner Nodejs-Anwendung verwenden zu können. Aber ich erhalten diese Fehlermeldung auf der Client-Seite:Socket.io mit Apache-Proxy

WebSocket connection to 'wss://example.com/tools/socket.io/?EIO=3&transport=websocket&sid=eOGwJSC14TTWhHRMAAAR' failed: Error during WebSocket handshake: Unexpected response code: 400 

Heres meine Apache-Konfiguration:

 <VirtualHost *:443> 
      ServerName example.com 
      ServerAlias example.com 
      #SSLRequireSSL 
      SSLProtocol all -SSLv2 -SSLv3 
      SSLCompression off 
      SSLHonorCipherOrder on 
      SSLEngine on 
      SSLCertificateFile /etc/ssl/main.pem 
      SSLCertificateKeyFile /etc/ssl/dec_ssl.key 
      SSLCertificateChainFile /etc/ssl/sub.class1.server.ca.pem 
      SSLCACertificateFile /etc/ssl/main.pem 
      SSLProxyEngine On 

      ProxyPreserveHost On 
      ProxyRequests off 
    </VirtualHost> 

    <Location /tools/> 
      ProxyPass http://localhost:8181/ 
      ProxyPassReverse http://localhost:8181/ 
    </Location> 

Und hier ist Client-Seite Code:

socket = io.connect("https://example.com",{path:'/tools/socket.io'}); 
socket.on("connect", function() { 
    console.log("socketio Connected to server!"); 
}); 

Was muss ich hinzufügen Apache-Konfiguration, um diesen Fehler loszuwerden?

EDIT: Meine Apache-Version: Server-Version: Apache/2.4.6 (CentOS)

+0

Sind Sie sicher, dass Ihr socket.io Server auf 8181 hört? Können Sie es direkt treffen? –

+0

Haben Sie Ihr Apache-Fehlerprotokoll überprüft? – jcaron

+0

@ M.Babcock, ja, Server läuft auf 8181. Imstande, socket.io.js von URL zu bekommen: https://example.com/tools/socket.io/socket.io.js – hs2d

Antwort

4

ich diese erfolgreich mit Apache 2.4.16 verwendet haben, ältere Versionen nicht richtig funktionieren kann.

<VirtualHost *:443> 
     ServerName example.com 
     ServerAlias example.com 
     #SSLRequireSSL 
     SSLProtocol all -SSLv2 -SSLv3 
     SSLCompression off 
     SSLHonorCipherOrder on 
     SSLEngine on 
     SSLCertificateFile /etc/ssl/main.pem 
     SSLCertificateKeyFile /etc/ssl/dec_ssl.key 
     SSLCertificateChainFile /etc/ssl/sub.class1.server.ca.pem 
     SSLCACertificateFile /etc/ssl/main.pem 
     SSLProxyEngine On 

     ProxyPreserveHost On 
     ProxyRequests off 
</VirtualHost> 

<Location /tools/> 
     RewriteEngine On 
     RewriteCond %{REQUEST_URI} ^/tools/socket.io   [NC] 
     RewriteCond %{QUERY_STRING} transport=websocket [NC] 
     RewriteRule "^/tools/socket.io"   "ws://localhost:8181/socket.io/" [P,L] 

     ProxyPass http://localhost:8181/ 
     ProxyPassReverse http://localhost:8181/ 
</Location> 

ProxyPass wird keine Websocket-Upgrades verarbeiten. Also, was Sie tun möchten, ist diese Anfragen zu ws: //

umleiten Ich denke, in der Regel sollten Sie nicht mit Location, um dies zu behandeln, aber diese Konfiguration sollte für Sie arbeiten.

+0

können Sie darauf hinweisen, wo sollte ich diese Zeilen in meine Apache-Konfiguration und was, wenn ich '/ tools /' anstelle Ihrer '/' – hs2d

+0

Mit Ihrer Konfig. Lies die Apache-Dokumentation zu Location, das ist vielleicht nicht der beste Weg für deine Config, aber ohne mehr zu wissen, kann ich nicht sicher sagen. – Gary

+0

Das änderte nichts für mich. Immer noch der gleiche Fehler wie im ursprünglichen Beitrag. – hs2d