2017-10-13 2 views
0

上のApacheサーバ上のPROXYPASSソケットIO私は私のサーバー(Apache 2のサーバとのUbuntu)にofficial sampleからノードJS socket.ioプロジェクトを展開しようとしているUbuntuの

これは/etc/apache2/sites-available/000-default.conf

ProxyPass /ChatSocket http://localhost:3000 
ProxyPass /socket.io http://localhost:3000/socket.io 
ProxyPass /socket.io ws://localhost:3000/socket.io 
の私のプロキシ設定です

しかし、DNS経由でWebサーバーにアクセスしようとすると、ソケットに接続できません。

URL http://example.com/socket.ioはWSと競合しているので、私は私のブラウザのコンソール

たぶん
WebSocket connection to 'ws://example.com/socket.io/?EIO=3&transport=websocket&sid=HgU6py-fCl1GFrdsAAAK' failed: Error during WebSocket handshake: Unexpected response code: 400 

でこのエラーを得た:

どのように私はのWebSocketを使用することができ//example.com/socket.io同じURLのhttp? //example.com/socket.ioはこのラインからsocket.io

var server = require('http').createServer(app); 
var io = require('socket.io')(server); 

によって生成され、この問題を解決するために、他の回避策はありますか、私のsocket.ioノードJSを展開:http://example.com/socket.ioとWSがいるようですので私のapacheサーバーのproxypassなしでアプリですか?

答えて

0

ネヴァーマインドは、私はそれがウェブソケット用RewriteEngineでの作業を取得するために管理する(ws://

は、これは私の000-default.conf/etc/apache2/sites-available

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/socket.io   [NC] 
RewriteCond %{QUERY_STRING} transport=websocket [NC] 
RewriteRule /(.*) ws://localhost:3000/%1  [P,L] 

ProxyPass /ChatSocket http://localhost:3000 
ProxyPassReverse /ChatSocket http://localhost:3000 
ProxyPass /socket.io http://localhost:3000/socket.io 
ProxyPassReverse /socket.io http://localhost:3000/socket.io 
です