2017-10-13 81 views
0

我想在我的服务器(与Apache 2服务器的Ubuntu)部署从official sample节点JS socket.io项目PROXYPASS插座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服务器时,我无法连接到套接字。

我在浏览器控制台得到这个错误

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

也许因为URL http://example.com/socket.io与WS相冲突://example.com/socket.io

我怎样才能使用的WebSocket和http具有相同的网址?因为它似乎http://example.com/socket.io和WS://example.com/socket.io由socket.io从这一行产生

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

是否有其他变通方法来解决这个问题,还是部署我socket.io节点的js应用程序在我的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