套接字.IO apache反向代理无法连接



我正在使用Socket。IO版本1.0.6。我有使用插座的问题。IO和apache代理。

在vhots中定义了代理,看起来像这样:

    ServerAdmin webmaster@localhost
    ServerName site.loc
    DocumentRoot /home/site/Private/dev/site
    ProxyPass /node http://localhost:5000
    ProxyPassReverse /node http://localhost:5000

所以url http://site.loc/node应该运行http://site.loc:5000

节点服务器如下图所示:

var port = 5000;
var server = require('http').Server();
var io = require('socket.io')(server);
io.on('connection', function(socket){
});
server.listen(port);
console.log('Listening on port: ' + port);

和客户端:

var socket = io.connect('ws://site.loc', {path: '/node/socket.io'});

And I receive message with

WebSocket握手错误:Unexpected response code: 400

我不想使用在节点服务器命名空间,但只路由所有的数据从url与/node到端口5000。

Thanks for help

我的评论格式看起来不太好,所以我将进行一些猜测并尝试回答您的帮助请求。

我猜你使用的是apache 2.2,它不太了解ws协议。套接字。

所以,最后,您应该能够使您的设置工作,尽管存在上述错误。

对于这一点,正如我在评论中所说的,我建议你改变你的io。连接如下:

var socket = io({path: '/node/socket.io'});

你仍然会得到这个错误,但是你的服务器和客户端应该仍然能够通信。

接下来,如果你想摆脱这个错误,我建议使用mod_proxy_wstunnel,这是可用于apache 2.4(显然有些人设法构建它为2.2,所以你也可以尝试)

Update:看起来像较新的套接字。IO改变了HTTP和ws的路径(以前是不同的,但现在基于相同的路径,后面跟着一个特定的查询)看看这个讨论这个问题的帖子:https://community.rackspace.com/developers/f/7/t/3477看起来nginx对websockets有更好的支持,应该是首选的解决方案。可能有必要研究一下检测套接字中的"transport"参数的方法。为了让apache知道使用哪个协议的ProxyPass。

编辑:更正路径,添加一些信息

相关内容

  • 没有找到相关文章

最新更新