【问题标题】:Node.js + Apache - https://localhost:3000/socket.io/ ERR_CONNECTION_REFUSEDNode.js + Apache - https://localhost:3000/socket.io/ ERR_CONNECTION_REFUSED
【发布时间】:2019-02-27 19:00:56
【问题描述】:

我正在用 Node.js 实现一个简单的游戏。我的客户端代码有一个client.js,还有一个在远程服务器上运行的server.js,它们都使用套接字在端口3000

上进行通信

我还在 端口 80 上运行 Apache,并在我的 apache 配置文件中使用 ProxyPass 将 url mywebsite.io/agario 路由到我的 nodejs 服务器。

<Location /agario>
     ProxyPass http://localhost:3000/
     ProxyPassReverse http://localhost:3000/
</Location>

我还使用 cloudflare 通过 URL https://agario.mywebsite.io 为 SSL 路由我的网络服务器 167.179.xx.xx,以便我可以使用 HTTPS。

问题

当我尝试连接到我的网站 https://agario.mywebsite.io/agario 时,我收到以下错误:

socket.io-1.4.5.js:1 GET https://localhost:3000/socket.io/?EIO=3&amp;transport=polling&amp;t=MakAMgZ net::ERR_CONNECTION_REFUSED

当我在代码中指定连接到远程服务器时,我不清楚为什么我的客户端代码尝试连接到本地主机。可能我只是对如何运行 node.js 服务器感到困惑,因为这是我第一次体验 Node.js 和套接字。

client.js

...
var socket;
socket = io.connect('https://agario.mywebsite.io/agario');
...

server.js

var app = express();
var server = app.listen(3000, listen);

// This call back just tells us that the server has started
function listen() {
  var host = server.address().address;
  var port = server.address().port;
  console.log('Example app listening at http://' + host + ':' + port);
}

app.use(express.static('public'));
var io = require('socket.io')(server);

io.sockets.on('connection',
  function(socket) {
    console.log("We have a new client: " + socket.id);

...

});

如果我遗漏了任何重要信息,请告诉我,我会更新我的问题,谢谢。

【问题讨论】:

    标签: javascript node.js apache sockets proxypass


    【解决方案1】:

    您的服务器正在侦听端口 3000,并且您正尝试通过 443 与其连接,您应该尝试这样的操作

    socket.connect('https://ip:3000');
    

    但是,如果您确定您的客户端使用与服务器相同的端口,或者您有端口转发,请尝试使用 netcat 以确保问题出在您的脚本而不是网络配置:

    nc -zv -w1 ip port

    【讨论】:

    • 谢谢你的回答,我会试试这个解决方案。我的 apache 配置中的 proxypass 肯定会进行端口处理吗?
    • 运行nc -zv -w1 127.0.0.1 3000返回connection to 127.0.0.1 3000 port [tcp/*] succeeded!
    • 这意味着端口 3000 已打开并且服务器正在侦听指向我的第一个建议.. 您的客户端正在使用端口 443 ,请使用以下 .connect('https://ip:3000')
    • 谢谢本。我尝试更改为 `socket.connect('https://:3000') 但我仍然看到错误
    • 你能分享你的服务器的ssl配置吗,也可以从客户端curl -I https://&lt;myip&gt;curl -I https://&lt;myip&gt;:3000在你的终端运行
    猜你喜欢
    • 2016-03-18
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2021-09-25
    • 2011-12-02
    • 2018-02-19
    相关资源
    最近更新 更多