繁体   English   中英

Node.js 服务器应该如何在生产中启动?

[英]How should a Node.js server be started in production?

在我的 Node.js 服务器中,我正在使用app.listen(443); 尝试并使用 HTTPS。 当我尝试在我的 Linux 服务器上运行它时,这给了我以下错误:

  Emitted 'error' event on Server instance at:
  at emitErrorNT (node:net:1459:8)
  at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  code: 'EACCES',
  errno: -13,
  syscall: 'listen',
  address: '0.0.0.0',
  port: 443
}

我不知道这意味着什么,但似乎服务器在使用端口443时遇到了问题。 当我使用app.listen()启动服务器时,我做错了吗?

1024 以下的端口需要额外的额外访问权限才能打开。 您的应用程序没有以 root 身份运行(这很好。)因此它无权监听 443。

根据您的 linux 分布,有多种方法可以允许特定用户访问特定端口

我的建议? 不要使用它们中的任何一个。

应该如何在生产中启动...服务器?

在应用程序前面使用经过验证且值得信赖的反向代理/负载均衡器。 nginx、haproxy 和 apache 是负载平衡/反向代理软件的 3 个示例,它们可以使用您的适当 SSL 证书在 443 上侦听 443 并转发一些请求。

这样做的原因有很多:

  • 硬化。 这些应用程序专门用于处理大量、不良行为者和网络问题。 它们能够以相对较少的资源处理大量流量。
  • 灵活性和可用性。 如果您的应用程序在 443 上运行,则升级应用程序的唯一方法是首先停止旧版本。 然后您可以在同一端口上启动新版本。 同时,在新版本准备好服务请求之前,您的应用程序处于离线状态。 如果应用程序端口无关紧要并且在负载均衡器之后,您可以在旧版本旁边调出新版本。 您甚至可以按百分比缓慢减少流量,如果您不喜欢 SLI 的外观(服务水平指标 - 即告诉您应用程序是否正常运行以及用户是否成功的指标),您有机会“切换回来”使用)
  • 可扩展性。 因此,当您需要添加另一台服务器时,这没什么大不了的。 或者也许这应该在“可用性”之下,因为能够更换服务器比在一天结束时升级和维护它们要容易得多。

如果您在云提供商上,他们可以提供负载均衡器。 每月 20 美元左右,对于超低预算、低容量的应用程序(无论如何更适合无服务器架构)来说,它们往往有点贵。 否则,在您的应用程序前面拥有一个一致、可靠、记录良好且完全托管的负载均衡器是非常值得的。 (有趣的是:至少在亚马逊上,并且可能在其他提供商上,您可以使用一个负载均衡器来托管多个不同的应用程序并根据主机名或请求的其他属性进行区分。您还可以将请求发送到 lambda 函数,它可以与运行专用操作系统相比,可显着节省金钱,更不用说您无需管理操作系统即可节省时间)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM