【问题标题】:Node.js and Apache: connection issuesNode.js 和 Apache:连接问题
【发布时间】:2013-02-03 06:24:22
【问题描述】:

我已经在 CentOS 服务器上安装了带有 Socket.io 的 Node.js,该服务器在端口 80 上运行 Apache。 我创建了一个套接字测试,它只监听 8080 端口。

如果我从服务器的外壳中卷曲地址 localhost:8080,我会收到 Socket.io-welcome 消息。如果我有这样的一行:

<script src="http://localhost:8080/socket.io/socket.io.js"></script>

那么浏览器就找不到文件了。

一个“解决方案”是将请求代理到/nodejs/http://localhost:8080/,但这个解决方案并没有奏效很长时间。

安装了 Apache 后是否可以运行 Node.js 服务器?必须更改哪些设置才能让我们访问 URL:http://server.com:8080?似乎 Node.js 只接受来自 localhost 的连接。

【问题讨论】:

  • Apache 可能与 WebSocket 不兼容
  • 可能8080端口被你的防火墙屏蔽了?

标签: node.js centos socket.io


【解决方案1】:

问题很可能出在您的 node.js 程序中。 它应该收听0.0.0.0 而不是127.0.0.1,这只是本地的。

所以你有类似的东西:

.listen(8080, '127.0.0.1'); // '127.0.0.1' or 'localhost'

你应该把它改成:

.listen(8080); // or 0.0.0.0

Apache 只会在它也使用端口 8080 时才会干扰,但如果是这种情况,您在启动节点应用程序时应该会收到错误消息。

此外,如果您在浏览器中连接到http://localhost,则只有当服务器与浏览器位于同一本地计算机上时,它才会起作用。我猜对测试很好。

如果您有托管服务器,则必须连接到域或 IP 地址,否则浏览器将找不到它。

更新: 您的 socket.io 代码也需要正确连接:

var socket = io.connect('http://correct.server.com:8080'); // not localhost

并且您的浏览器需要从正确的位置加载 javascript 文件:

<script src="http://correct.server.com/socket.io/socket.io.js"></script> // not localhost

这可能有助于解决防火墙/负载平衡器问题:

https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software

【讨论】:

  • 感谢您的回复!不幸的是,它似乎没有奏效。我们的服务器位于负载均衡器后面;这会干扰吗?如果我通过 Apache(代理),这将在 Firebug 中输出(在回退到 xhr 轮询之前):"NetworkError: 502 Bad Gateway - http://server.com/nodejs/socket.io/1/websocket/Zp2XXL10rKJALNuKmw6t" Firefox can't establish a connection to the server at ws://server/nodejs/socket.io/1/websocket/Zp2XXL10rKJALNuKmw6t
  • 我不确定负载平衡器。您需要确保端口 8080 将在任何地方到达您的服务器表单。如果您的节点服务器在0.0.0.0 上运行,任何能够访问它的东西都可以连接到它。在此之后,请确保从适当的 url(不是 localhost)加载 .js 文件,并确保 socket.io 代码正确连接。我将在上面更新我的答案以进行演示。如果这一切都到位并且仍然无法正常工作,我现在很难过:)
  • 好吧,这就是我所做的:创建一个 HTTP 子域,并使用 HAproxy 代理请求。没有 100% 工作,因为我们是从 HTTS 子域连接的。由于某种原因,HAproxy 没有从套接字将套接字数据发送回客户端,导致超时。套接字正在记录,它一直在发送数据。使用 Apache 代理不起作用。在 HTTPS 子域上创建子域会导致证书警告。唯一被证明可以的解决方案是在负载均衡器中打开端口,然后连接:https://sub.server.com:8080。感谢您的意见!
猜你喜欢
  • 2021-05-07
  • 2021-02-22
  • 2014-06-13
  • 2011-09-21
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
相关资源
最近更新 更多