如何使用 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?的主要内容,如果未能解决你的问题,请参考以下文章