2013-02-18 35 views
8

我的node.js应用程序我在端口80上听HTTP,而在https上听443,我相信这是相当标准的做法。node.js应监听哪些端口?如何和为什么?

然而一些例子我最近已阅读使用其他端口(例如8080和8081),用于收听HTTP/HTTPS,然后使用其它手段如iptablesufw规则四百四十三分之八十○通过重新路由分组到服务端口/来自其他人。

查看两个示例herehere

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

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

假设我为什么不想直接听80和/或443,这个方法应该用来将来自80/433的流量转发到我选择的其他端口的一个很好的理由?

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

在此先感谢。

+2

我认为它因为你需要root权限运行在低于​​1024的端口,你不想让你的应用程序有根,但有方法来绑定它stil。我personaly使用[AuthBind](http://en.wikipedia.org/wiki/Authbind) – VeXii 2013-02-18 15:04:41

+1

如果我没有错,端口1337正在成为运行nodejs的标准。要执行应用程序,您可以使用NGINX作为反向代理服务器。 – 2015-03-16 05:26:04

回答

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环境,涉及所有开销。节点在处理大量的同时连接方面非常出色,并且它可以为普通负载提供完美的文件服务,但它会比使用NginX更多的资源来完成。

使用HTTP-aware代理(如Apache/NginX)也意味着您可以非常轻松地设置多个Node实例,以在同一个域上运行不同的子域或甚至不同的路径。

+0

使用NginX/Apache来提供文件而不是Node有什么好处? – Joshua 2013-02-18 15:10:57

+1

@Joshua更新时间 – loganfsmyth 2013-02-18 15:15:03

+0

@loganfsmyth:但是如果你使用Apache或NginX的方法......这意味着,这些服务器需要root权限才能监听端口80,对吧?那为什么不是他们的问题,但是对于node.js来说呢? – Manfred 2015-08-25 09:10:06