Socket.io SSL错误

我正在努力确保我的网站

一切都好,直到我终于安装了SSL证书(从CloudFlare,而不是一个自签名的证书)

所以问题是:当我通过HTTP打开我的网站 – 一切正常,但是当我通过https打开它 – 网站正在失去连接到主机(它需要工作)

在控制台中,我可以看到:

socket.io-1.4.5.js:1 GET https://188.226.131.219:8080/socket.io/?EIO=3&transport=polling&t=LlI-URK net :: ERR_CONNECTION_CLOSED

如果我理解正确,这是一个端口问题。 使用HTTP端口80是可以的,使用https端口443有问题。 有什么办法来交换端口?

看起来你的前端位于http://188.226.131.219,而你在http://188.226.131.219:8080上有一个WebSocket服务。

你已经configuration你的前端使用SSL证书,可以在https://188.226.131.219上find ,但是到你的WebSocket服务的链接可能取决于用于加载前端的协议和主机,所以如果你从https:/ / /188.226.131.219 ,那么你的前端JS将尝试连接到https://188.226.131.219:8080 ,但是你的WebSocket服务在那里侦听HTTP请求,而不是HTTPS请求。

首先,你需要设置你的WebSocket服务来使用SSL证书,但是在不同的端口上(例如8443),那么你将不得不修改你的前端,以便能够下载它是如何加载的(使用HTTP或HTTPS )并找出WebSocket服务的正确端口。

您可以尝试以下方法:

在node.js后端,将socketconfiguration为:

var fs = require('fs'); var https = require('https'); var app = require('express')(); var options = { key: fs.readFileSync('<.key location>'), cert: fs.readFileSync('<.cert location>') }; var server = https.createServer(options, app); server.listen(443, "0.0.0.0", function(){ console.log('listening in port', 443); }); 

在客户端应用程序中,您需要连接为:

  socket = io.connect(<server_ip>, { secure: true }); 

我只是想把它扔在那里。 这是导致我类似的错误,可能是你在找什么。

socket.io的例子说使用IP地址来连接你的客户端脚本到服务器。 像这样的东西:

 var socket = io.connect("https://123.45.6.78:443"); 

但是,一旦为SSL证书添加了“A”logging,则需要使用“A”logging的主机名,而不是它所指向的IP地址。 像这样:

 var socket = io.connect("www.mysite.com");