2015-12-23 18 views
7

私のnodejsアプリケーションでsocket.ioを使用できるようにするには、apxとproxyngを設定しようとしています。私は追加する必要がある他に何Socket.io with apache proxy

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

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に私のApacheの設定:

 <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> 

そして、ここでは、クライアント側のコードですが、私は、クライアント側でこのエラーメッセージを受け取りますこのエラーを取り除くためにApacheの設定に?

EDIT:私のApacheのバージョン:Serverバージョン:Apacheの/ 2.4.6(CentOSの)

+0

socket.ioサーバーが8181でリッスンしていますか?あなたはそれを直接打つことができますか? –

+0

あなたのApacheエラーログをチェックしましたか? – jcaron

+0

@ M.Babcock、はい、サーバーは8181で動作しています。私はURLからsocket.io.jsを取得できます。https://example.com/tools/socket.io/socket.io.js – hs2d

答えて

4

私は、Apache 2.4.16で、古いバージョンでは正常に動作しないことに成功し、これを使用しています。

<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はwebsocketのアップグレードを処理しません。あなたがしたいのは、これらの要求をwsにリダイレクトすることです://

私は一般的に、これを処理するために場所を使用すべきではないと思いますが、この設定はあなたのために働くはずです。

+0

私はあなたの設定で更新された '/' – hs2d

+0

の代わりに '/ tools /'を使って私のapache設定にこれらの行をどこに置くべきかを指摘できます。あなたの設定のための最善の方法ではないかもしれない、場所に関するApacheのドキュメントを読んでください。しかし、もっと分かっていなくても、私は確かに言えません。 – Gary

+0

これは私のために何も変わりませんでした。元の投稿と同じエラーが表示されます。 – hs2d