我应该在node.js上监听哪些端口?怎么样和为什么?

时间:2013-02-18 15:01:34

标签: node.js http https port

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

然而,我最近阅读的一些示例使用其他端口(例如8080和8081)来监听http / https,然后使用其他方法(例如iptablesufw规则来服务端口80/443通过重新路由到其他人的数据包。

请参阅两个示例herehere

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

手头有安全问题吗?这仅仅是这些作者没有权限侦听低于1024的端口的情况(我发现这令人惊讶吗?)?大多数人沿着侧节点运行Apache吗? (我没有)。

假设有一个很好的理由说明为什么我不想直接收听80和/或443,我应该使用哪种方法将流量从80/433中继到我选择的备用端口?< /强>

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

提前致谢。

1 个答案:

答案 0 :(得分:14)

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

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

要将节点绑定到端口80443,您需要以root身份运行它,这不是一个好主意。

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

Apache和NginX都明确地设计为非常擅长提供静态文件,所以他们非常擅长,而Node是一个完整的JS环境,涉及所有开销。 Node非常适合处理大量的同步连接,并且它可以很好地为正常负载提供文件,但它将使用比NginX更多的资源来实现它。

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