Node.js 和 Apache : connection issues

标签 node.js centos socket.io

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

如果我从服务器的外壳中 curl 地址 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 的连接。

最佳答案

问题很可能出在您的 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 时才会干扰,但如果是这种情况,在启动 Node 应用程序时应该会出错。

此外,如果您连接到 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

关于Node.js 和 Apache : connection issues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14942795/

相关文章:

javascript - 检查某个类的对象的值是否已被更改

linux - 远程访问 Linux 上的 Web 服务器

pdo - Centos 8、PHP 7.2 和 MS SQL Server

python - Django Admin 文件上传时出现 "Connection Reset"错误

ubuntu - Nodejs 安装不工作,[Errno 13] 权限被拒绝 : '/usr/local/include/node/'

node.js - 如何编写用于文件上传的 Node.js express API?

node.js - 基于 Electron 的应用程序会传递系统范围的 nodejs 环境变量吗?

javascript - Promise 不解析 node.js

javascript - socket.io 原始集但无论如何都会出现错误

node.js - Socket.io 连接恢复轮询,从不触发 'connection' 处理程序