我在CentOS服务器上安装了带有Socket.io的Node.js,该服务器在端口80上运行Apache。 我创建了一个套接字测试,它只是侦听端口8080.
如果我从服务器的shell中卷曲地址localhost:8080,我会收到Socket.io-welcome消息。如果我有这样的一行:
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
然后浏览器找不到该文件。
“解决方案”是将/nodejs/
的请求代理到http://localhost:8080/
,但此解决方案无法使用很长时间。
安装Apache时是否可以运行Node.js服务器?我们必须更改哪些设置才能访问网址:http://server.com:8080
?似乎Node.js只接受来自localhost的连接。
答案 0 :(得分: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