【问题标题】:WebSocket/Node.js help: Can't establish a connection to wss://domain:8080 - NOT browser specificWebSocket/Node.js 帮助:无法建立到 wss://domain:8080 的连接 - 不是特定于浏览器的
【发布时间】:2021-07-05 14:01:33
【问题描述】:

您好,很抱歉我的第一个堆栈溢出问题,所以我会尽力而为。我已经阅读了数十个相关问题,但似乎没有一个能够为我提供答案。

我最近开始使用 Node.js,因为我需要 websockets 来实现我网站上的某些功能,而 Node.js 似乎是流行的选择。我的网站通过 LetsEncrypt 获得了 SSL 证书,因此我已将证书和密钥文件添加到我的 WSS 配置文件“index.js”中,如下所示:

const fs = require("fs");
const https = require("https");
const WebSocket = require("ws");

const server = https.createServer({
    cert: fs.readFileSync("/etc/letsencrypt/live/my_domain.com/cert.pem"),
    key: fs.readFileSync("/etc/letsencrypt/live/my_domain.com/privkey.pem"),
    requestCert: true,
    rejectUnauthorized: false
});

const wss = new WebSocket.Server({ server });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  ws.send('something');
});

server.listen(8080, () => console.log("Listening on port :8080"))

当我通过终端在我的服务器上节点 index.js 时,我没有收到任何错误,并且它按预期输出:'Listening on port :8080'。然后,当我导航到一个简单的 index.html 页面时,我测试它是否使用以下代码:

<script>
    const socket = new WebSocket("wss://my_domain.com:8080");

    socket.addEventListener("open", function (event) {
        console.log("We are connected!");

        ws.send("Hi! I've connected!");
    });

    socket.addEventListener("message", function (event) {
        console.log(e.data);
    });
</script>

我只是在浏览器中收到以下控制台错误:

火狐:

Firefox 无法与位于 wss://my_domain.com:8080/ 的服务器建立连接。

铬:

到 'wss://my_domain.com:8080/' 的 WebSocket 连接失败: (匿名)@index.html:60

我在网络检查器工具中看不到任何其他详细信息,但如果有什么我可以提供的额外说明/上下文,请询问,我会尽快回复。

编辑:This article 被建议但似乎没有解决问题:在他们的问题中,它适用于 chrome 但不适用于 Firefox,我的尚未在任何浏览器中工作。同样在该帖子的答案中,他们建议转到“同一服务器上的正常页面”以接受证书,但我似乎无法在我的任何页面上触发对话框。

我也认为我的证书不是自签名的,因为所有这些帖子似乎都是,但老实说我不知道​​:

证书信息截图

【问题讨论】:

  • @James No- 在他们的问题中,它可以在 chrome 中运行,但不能在 Firefox 中运行,我的还没有在任何浏览器中运行。同样在该帖子的答案中,他们建议转到“同一服务器上的正常页面”以接受证书,但我似乎无法在我的任何页面上触发对话框。
  • 这可能表明存在问题 - 访问 websocket 端点时,您的浏览器将不接受服务器上的 SSL 证书。我对该错误消息所做的所有谷歌搜索都指向证书。
  • @James 所有这些文章都指的是自分配证书。老实说,我对 SSL 证书了解不多,但我刚刚检查了我的证书详细信息,它显示颁发者为 Let's Encrypt。这是否意味着它不是自分配的,因此所有这些答案都无关紧要?
  • Let's encrypt 不是自签名的。在浏览器中访问 https://my_domain.com:8080/ 时是否遇到类似错误?

标签: javascript node.js ssl websocket https


【解决方案1】:

经过数小时试图找到复杂问题的复杂答案后,它最终变成了一个简单的防火墙问题,所以我想我会回来发布为我解决的问题,以防其他人将来遇到类似问题。

我只是在服务器上运行了以下命令:

 ufw allow 3000/tcp

祝大家好运:)

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多