我已经在 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/