繁体   English   中英

Socket.io Apache反向代理无法连接

[英]Socket.io apache reverse proxy unable to connect

我正在使用Socket.io 1.0.6版。 我在使用socket.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

因此网址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'});

我收到消息

WebSocket握手期间出错:意外的响应代码:400

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

感谢帮助

我的评论的格式看起来不太好,因此我会做一些猜测,并尝试回答您的帮助请求。

我的猜测是您使用的Apache 2.2不太了解ws协议。 socket.io,但是仍然可以故障转移AFAIK。

因此,最后,尽管存在上述错误,您仍然应该能够进行设置。

为此,正如我的评论中所述,建议您按以下方式更改io.connect:

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

您仍然会收到此错误,但是您的服务器和客户端仍然应该能够通信。

接下来,如果您希望摆脱此错误,我建议您使用mod_proxy_wstunnel,它可用于Apache 2.4(显然有些人也设法将其构建为2.2,因此您也可以尝试这样做)

更新:看起来较新的socket.io更改了http和ws的路径(以前是不同的,但是现在基于相同的路径,后面是特定的查询)。请看下面讨论以下内容的线程: https:// community.rackspace.com/developers/f/7/t/3477看来,nginx对websocket具有更好的支持,应该是这里的首选解决方案。 可能值得研究一下在socket.io查询中检测“ transport”参数的方法,以便让apache知道对ProxyPass使用哪种协议。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM