Node.js 应该监听哪些端口?如何以及为何?

2023-11-26

我的 Node.js 应用程序在端口 80 上监听 http,在端口 443 上监听 https,我认为这是相当标准的做法。

然而,我最近读到的一些例子使用其他端口(例如8080和8081)来监听http/https,然后使用其他方式,例如iptables or ufw通过将数据包重新路由到其他端口或从其他端口重新路由来服务端口 80 / 443 的规则。

看两个例子here and here.

所以我的问题是为什么我不想直接监听端口 80 和 443?

是否存在安全问题?这仅仅是这些作者没有权限侦听低于 1024 的端口的情况吗(我觉得这很令人惊讶?)?大多数人都在旁节点运行 Apache 吗? (我不)。

假设我有充分的理由不想直接收听 80 和/或 443,我应该使用哪种方法将流量从 80 / 433 中继到我选择的替代端口?

我在上面提到了 iptables 和 ufw,其中之一比其他更好,还是我应该使用其他方法?答案是否取决于我是否在进程之间平衡负载?

提前致谢。


您链接到的第一篇文章的第一行提到了原因。

Standard practices say no non-root process gets to talk to
the Internet on a port less than 1024.

用于节点绑定到端口80 or 443,您需要以 root 身份运行它,这不是一个好主意。

将流量重新路由到更高端口的方法取决于您。这iptables是资源消耗最少且最简单的。另一种方法是使用 NginX/Apache 代理 Node.js。我想说该方法的主要好处是,您还可以从那里提供静态文件之类的东西,而不必通过 Node.js 来提供它们。

Apache 和 NginX 都被明确设计为非常擅长提供静态文件,因此它们非常擅长,而 Node 是一个完整的 JS 环境,涉及所有开销。 Node 非常擅长处理大量并发连接,并且它当然可以很好地为正常负载提供文件服务,但它会比 NginX 使用更多的资源来做到这一点。

使用像 Apache/NginX 这样的 HTTP 感知代理还意味着您可以非常轻松地设置 Node 的多个实例来运行不同的子域,甚至同一域上的不同路径。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js 应该监听哪些端口?如何以及为何? 的相关文章

随机推荐

  • 有没有办法从大比例图像创建 xxhdpi、xhdpi、hdpi、mdpi 和 ldpi 可绘制对象?

    有没有办法从大尺寸图像自动创建 xxhdpi xhdpi hdpi mdpi 和 ldpi 可绘制对象 例如 假设我有一个 512x512 图像 并且我希望在适当的文件夹中针对 Android 支持的不同屏幕分辨率拥有该图像的不同版本 选项
  • 如何在C#中增加控制台窗口的大小?

    我正在为将在应用程序中实现的一项功能创建一个原型 特别是我正在将集合中的数据显示到控制台窗口 但不幸的是 某些行的跨度比控制台窗口的默认宽度更宽 我做了一点挖掘并发现增加窗口宽度的唯一方法是深入研究 Kernel32 dll 并手动完成 尽
  • 加快 Vagrant 上主机和来宾之间的同步延迟(NFS 同步文件夹)

    我正在使用 vagrant 在本地计算机上运行 wordpress 开发环境 并将 nfs 设置为默认文件共享机制 我在 Mac 上 总体性能非常好 除了一件事 同步延迟 我已经在来宾上设置了 grunt 观察程序来重新编译 css jav
  • UTF-8 编码与 Base-64 编码

    我想对一个文件 可能是图像或任何 pdf 进行编码并将其发送到服务器 我必须遵循哪种类型的编码和解码 服务端和客户端都在我们公司 我们可以在两个地方写逻辑 UTF 8 编码java默认支持 并使用Base 64编码我必须导入外部jar 对于
  • Jupyter 笔记本中的自动完成功能不起作用

    安装Anaconda最新版本后 我尝试了以下步骤 我无法让自动完成功能正常工作 关于我还需要尝试什么的任何建议 步骤1 1 pip安装jupyter contrib nbextensions 2 pip安装jupyter nbextensi
  • 忽略 ASP .NET MVC 中的文件夹

    我有一个现有的 ASP NET MVC 应用程序 我想忽略其中的特定文件夹 我打算在其中放置 PHP 脚本 我尝试按照描述添加忽略路由here但它不起作用 因为我仍然收到标准 ASP NET 配置错误 例如 假设我有这个文件夹结构 root
  • 如何使用 Async/Await 快速进行进度报告?

    我有一个需要 2 个回调的函数 我想将其转换为异步 等待 但我怎样才能在等待的同时不断返回进度呢 我在用https github com yannickl AwaitKit摆脱回调 typealias GetResultCallBack S
  • 使用 GROUP BY 和 Count(*) 进行匿名类型的 LINQ 查询

    我尝试使用 LINQ 查询来确定我拥有的每种特定对象类型的数量 并将这些值记录到匿名类型中 假设我有一些看起来像这样的数据 确实有暴露此属性的对象 但它的工作原理相同 GroupId 1 1 2 2 2 3 我知道如何在 SQL 中格式化我
  • 使用 JeMalloc 查找 Java 应用程序中的本机内存泄漏

    目前我正在尝试解决 Java 内存问题 我的 Java 应用程序不断使用越来越多的内存 最终它被 Linux OOM 杀手杀死 很可能是本地内存泄漏 因为经过检查 使用 VisualVM 的 JVM 的元空间和堆看起来都不错 使用top命令
  • 一台服务器上的多个 Zend 框架站点

    我在设置 httpd conf 或 htaccess 文件以识别一台服务器上的多个 zend 框架站点时遇到问题 对于开发 我只有一台服务器 我正在尝试设置站点 以便我可以访问它们 例如 localhost app1 localhost a
  • python pdb lambda函数全局名称错误

    我正在使用测试修复pdb set trace 在实施之前确保它按照我预期的方式工作 并不断出现奇怪的错误 Pdb test 1 2 3 4 4 3 2 1 Pdb max range len test key lambda i test i
  • 内容解析器返回错误的大小

    我正在从图库中选择一张图像并通过以下方式查询其大小ContentResolverAPI 它返回29kb 但是 当我使用 adb 检查文件时ls al它是 44kb 这是我查询图像大小的方法 private fun getFileInfo c
  • 我们如何在 iOS 应用程序中使用自定义字体? [复制]

    这个问题在这里已经有答案了 可能的重复 我可以在 iPhone 应用程序中嵌入自定义字体吗 如何在 iPhone 应用程序中自定义字体 是否可以 我怎样才能在a中使用这个自定义字体UILabel 我正在尝试添加MYRIADPRO SEMIB
  • 如何使用 OkHttp 设置连接超时

    我正在使用 OkHttp 库开发应用程序 我的麻烦是我找不到如何设置连接超时和套接字超时 OkHttpClient client new OkHttpClient Request request new Request Builder ur
  • Android房间数据库不会导出所有数据

    我正在尝试设置 Room 数据库备份功能 问题是 下载后 sql 数据库文件不包含应用程序中的最新数据集 它总是会错过一些最近的记录 有没有导出房间数据库的正确方法 附 在使用 sqliteHelper 处理我的数据库时 我没有遇到类似的问
  • Delphi XE2后台IDE编译器找不到源路径

    我刚刚购买了 XE2 版本 安装了更新 1 ISO 并制作了我的开源项目用它来编译 In fact 我将库的源代码路径添加到常规设置IDE中 适用于我使用的所有平台 即到目前为止的Windows 32位和64位 我编译了TestSQLite
  • 如何将 Python 3.5 设置为 MacOS 上的默认版本?

    我刚刚在 Mac 上安装了 Python 3 5 1 运行最新版本的 OSX 我的系统安装了 Python 2 7 当我打字时IDLE在终端提示符下 我的系统会启动原始的 Python 2 7 而不是新安装的 Python 3 5 当我从终
  • Parameter.As String 在 Oracle/SQL 下失败 - Parameter.Value 2 字节字符在 Oracle 下

    更改为 FireDAC 后 我无法让此代码在 MSSQL Oracle 上运行 with DataFormsettings do begin Close if Params Count 0 then FetchParams Params P
  • 原因:(noSuchName) 此 MIB 中没有这样的变量名称

    我使用的是centos操作系统 我正在尝试通过以下方式获取本地主机的内存统计信息snmpget命令 我收到此错误 snmpget v 1 c public localhost 1 3 6 1 4 1 2021 4 6 Error in pa
  • Node.js 应该监听哪些端口?如何以及为何?

    我的 Node js 应用程序在端口 80 上监听 http 在端口 443 上监听 https 我认为这是相当标准的做法 然而 我最近读到的一些例子使用其他端口 例如8080和8081 来监听http https 然后使用其他方式 例如i