WebSocket/Node.js 帮助:无法建立到 wss://domain:8080 的连接 - 不是特定于浏览器的
Posted
技术标签:
【中文标题】WebSocket/Node.js 帮助:无法建立到 wss://domain:8080 的连接 - 不是特定于浏览器的【英文标题】:WebSocket/Node.js help: Can't establish a connection to wss://domain:8080 - NOT browser specific 【发布时间】: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,我的尚未在任何浏览器中工作。同样在该帖子的答案中,他们建议转到“同一服务器上的正常页面”以接受证书,但我似乎无法在我的任何页面上触发对话框。
我也认为我的证书不是自签名的,因为所有这些帖子似乎都是,但老实说我不知道:
证书信息截图
【问题讨论】:
这能回答你的问题吗? Can not established Websocket secure connection on Firefox @James No- 在他们的问题中,它可以在 chrome 中运行,但不能在 Firefox 中运行,我的还没有在任何浏览器中运行。同样在该帖子的答案中,他们建议转到“同一服务器上的正常页面”以接受证书,但我似乎无法在我的任何页面上触发对话框。 这可能表明存在问题 - 访问 websocket 端点时,您的浏览器将不接受服务器上的 SSL 证书。我对该错误消息所做的所有谷歌搜索都指向证书。 @James 所有这些文章都指的是自分配证书。老实说,我对 SSL 证书了解不多,但我刚刚检查了我的证书详细信息,它显示颁发者为 Let's Encrypt。这是否意味着它不是自分配的,因此所有这些答案都无关紧要? Let's encrypt 不是自签名的。在浏览器中访问https://my_domain.com:8080/
时是否遇到类似错误?
【参考方案1】:
经过数小时试图找到复杂问题的复杂答案后,它最终变成了一个简单的防火墙问题,所以我想我会回来发布为我解决的问题,以防其他人将来遇到类似问题。
我只是在服务器上运行了以下命令:
ufw allow 3000/tcp
祝大家好运:)
【讨论】:
以上是关于WebSocket/Node.js 帮助:无法建立到 wss://domain:8080 的连接 - 不是特定于浏览器的的主要内容,如果未能解决你的问题,请参考以下文章
WebSocket+Node.js+dGram+Vue 入门级小系统