Socket.io 无法使用 https(让我们加密)

not*_*ero 4 https nginx node.js socket.io lets-encrypt

我正在使用 ASP.NET CORE 2.0 构建电子商务。电子商务有一个使用nodejs和socket.io包构建的聊天室。socket.io 服务器位于远程服务器上。当我在本地使用Socket.io 客户端并运行 Visual Studio 调试器来访问远程 socket.io 时,一切正常。

代码是这样的,注意我没有使用https

var app2 = require('express')();
var http = require('http').Server(app);
var http2 = require('http').Server(app2);
var io = require('socket.io')(http);


http.listen(3009, function () {
    console.log('listening on port 3009');
});

http2.listen(3011, function () {
    console.log('listening on port 3011');
});
Run Code Online (Sandbox Code Playgroud)

但是当我发布我的网站并获取 html 页面以及 Nginx/kestrel 提供的 socket.io 客户端时,我收到一条错误消息,说我正在混合某些内容,我没有注意该错误消息,因为我记得我在我的服务器socket.io 和客户端上使用http。所以我改变了socket.io服务器和客户端,但现在我无法连接。

我的改变是这样的:

var app2 = require('express')();
var http = require('https').Server(app);
var http2 = require('https').Server(app2);
var io = require('socket.io')(http);


http.listen(3009, function () {
    console.log('listening on port 3009');
});

http2.listen(3011, function () {
    console.log('listening on port 3011');
});
Run Code Online (Sandbox Code Playgroud)

客户

  myIo = io('https://www.example.com.br:3009', { secure: true, reconnect: true, rejectUnauthorized: false });
Run Code Online (Sandbox Code Playgroud)

我使用 Let's encrypt 来启用 https 连接,我使用 Nginx 作为 Kestrel 的代理,我在 Ubuntu 17 上使用 ufw。

not*_*ero 6

我昨天收到这个错误。我晚上什至无法入睡。但我成功了。我像这样发送了证书。

var app = require('express')();

var app2 = require('express')();
var fs = require('fs');


var options = {
    key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'),
    cert: fs.readFileSync('/etc/letsencrypt/live/example.com/cert.pem')
};

var http = require('https').Server(options, app);


var io = require('socket.io')(http);

app.get('/', function (req, res) {
    res.send('server is running');
});

app2.get('/', function (req, res) {
    res.send('admin area');
});
Run Code Online (Sandbox Code Playgroud)

我不希望任何人经历挫败感。希望我能帮助别人。