【问题标题】:How can I create an SSL connection for socket.io in nest.js?如何在 nest.js 中为 socket.io 创建 SSL 连接?
【发布时间】:2018-02-20 12:05:41
【问题描述】:

|你好|

我们正在使用nest.js 和socket.io 开发一个应用程序,我想知道是否可以为这个环境创建一个SSL 连接。

这里是回购的链接:https://github.com/nokia/skilltree (最近在David分支做了尝试)

我试过这个,但 socket.io 仍然不使用 SSL 连接: https://blog.cloudboost.io/everything-about-creating-an-https-server-using-node-js-2fc5c48a8d4e 他们建议这样做:

var options = {
  key: key,
  cert: cert,
  ca: ca
};
var https = require('https');
https.createServer(options, app).listen(443);

提前感谢您的帮助

【问题讨论】:

  • 另一个适用于我们解决方案的选项是在 websocket 服务器的前面设置一个 网络负载均衡器,并附上公共证书。这样,您的 NLB 处理 SSL,您的 websocket 无需在服务器上配置 https 即可工作。

标签: node.js socket.io ssl-certificate


【解决方案1】:

花了一整天的时间来解决完全相同的问题,这是我能找到的最佳解决方案:

const httpsOptions = {
    key: key,
    cert: cert,
    ca: ca
};
const expressInstance: express.Express = express();
const app: NestApplication = await NestFactory.create(
    MainModule, 
    expressInstance, 
    { httpsOptions }
);
await app.listen(Environment.PORT);

使用这种方法,安全的 websocket 对我来说工作得很好

【讨论】:

    【解决方案2】:

    Nest 将一个选项对象作为第二个参数,其中还包含 https 选项,例如:

    const app = await NestFactory.create(AppModule, { 
        httpsOptions: {
          key: 'key',
          ca: 'ca',
          cert: 'cert',
        },
      });
    
    await app.listen(3000);
    

    所以应该不需要自己创建 express 实例。 没有测试,但它应该确实有效。 :) 另见:HttpOptions Interface NestJs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 2018-01-19
      • 2016-09-09
      • 2015-04-01
      • 2014-06-29
      • 1970-01-01
      相关资源
      最近更新 更多