如何使用 Node.js 为所有连接最好地实现 HTTPS?

Posted

技术标签:

【中文标题】如何使用 Node.js 为所有连接最好地实现 HTTPS?【英文标题】:How to best implement HTTPS with Node.js for all connections? 【发布时间】:2017-08-30 17:21:18 【问题描述】:

我正在通过 Node.js/ExpressJs 中的 Double Submit Cookie 构建无状态身份验证,我想知道如何才能最好地通过 HTTPS 进行所有连接。

原因是我希望能够处理高流量,并且出于安全原因仅使用 HTTPS 和无状态身份验证。

    是否应该避免 HTTPS npm 依赖并在 nginx 中设置反向代理服务器?

    也许我可以配置 Nginx,使其强制 HTTPS 而无需在 ExpressJs 中进行任何其他应用内设置?

【问题讨论】:

【参考方案1】:

你有两个选择:

    使用 Node.js 自带的内置 https 模块(不是 npm 模块)。这将处理 HTTPS 请求。适用于轻型应用程序、个人网站、开发。 在您的 Web 服务器(使用http 模块)前面设置一个代理(nginx、HAProxy 等)。代理将从传入的 HTTPS 请求终止 SSL,然后将纯 HTTP 请求代理到您的 Web 服务器。适用于需要这些代理软件提供负载平衡的生产、高流量应用程序。

为了玩,我建议使用内置的https 模块来简单。我想您不会期望数百万个请求将代理引入您的堆栈。

【讨论】:

其实我有。这就是为什么出于性能原因我想将 Double Submit Cookie 实现为无状态身份验证的原因。为什么说代理会终止 SSL?我希望服务器对所有连接强制执行 HTTPS。我需要一些资源来研究这个主题。谢谢! @DarkCodeWiz,您列出了 2 个选项,他们提出了相同的建议:使用 nginx 而不是 Node.js 的内置 HTTPS 功能。如果你想要,它被称为 SSL 终止,我在我的选项 2 中提到过。如果你真的想保护所有连接,甚至是多个主机甚至进程之间的本地通信,那么在 Node.js 中使用 HTTPS 模块。出于性能原因,我建议使用任何类型的代理,例如 nginx,它将终止 SSL 并在 HTTP 服务器的多个进程之间分配负载。 再次感谢您。我将尽我所能回答你,并更新我稍后在这里所做的作为答案。

以上是关于如何使用 Node.js 为所有连接最好地实现 HTTPS?的主要内容,如果未能解决你的问题,请参考以下文章

node.js 怎么连接mssql数据库,最好有简易的方法

node.js如何配置mongodb连接池?

如何在 Node.js 中高效/快速地执行数组连接,类似于 MongoDB $lookup?

使用 node.js 的实时文本

如何在 node.js 中的模块之间共享连接池?

如何在 node.js 中使用 sequelize-npm 实现与连接表的一对多关系