在一个端口上使用单个应用程序的节点应用程序使用代理服务器(如node-http-proxy)有什么意义?

我正在探索使用node-http-proxy代理服务器,以便我们可以在端口80上将我们的代理服务器转发到端口8000上的我们的应用服务器。但是,我有点困惑,为什么这是一个好主意,而这个设定会如何保护安全。

note-http-proxy文档讨论了很多使用它作为将请求转发到具有多个端口或IP地址的应用程序的方法。 这显然是非常有用的,特别是基本的循环负载平衡策略。 但是,我们只在一个端口上有一个应用程序,所以我们没有必要这样做。

如果有一个重要的安全原因,我们应该使用这个代理服务器,那么我想知道什么types的攻击,它的保护。 另外,我们使用的是socket.io,所以如果代理服务器能够帮助websocket服务器扩展,我也想明白这一点。 我们无法确定如何在没有sudo情况下运行我们的应用程序(因为所有1024以下的端口都需要root访问权限),所以如果现在真的没有理由使用代理服务器,那么我们只会报废。 如果有人知道如何使用端口80上的代理服务器运行这个应用程序没有根权限,这也是非常有用的。 谢谢!

运行反向代理的原因是:

  • 您有限的IP端口打开,并需要运行许多节点服务,每个服务需要它自己的端口
  • 您的后端服务不支持HTTPS,但您需要它(例如Derby)
  • 要添加一些其他function的请求,不能轻易完成后端,如添加基本身份validation或某种forms的通用日志logging/审计
  • 对多个后端服务通用的传出响应执行添加或更改
  • 提供负载平衡服务

除非您的需求非常简单,否则使用专用代理(如HAproxy)会更好,因为node-http-proxy非常简单。

那么,如果你只运行一个服务器实例,那么这不是一个真正的原因。 node-http-proxy文档提到跨多个应用使用单个SSL证书,这是非常可能的。 您还可以在多个HTTP和Web套接字服务器之间进行负载平衡(比如,为实时数据运行10个socket.io服务器,但只有一个HTTP服务器提供资产和REST API)。 当然有一个例子,这些没有提供任何好处。

如果你想运行没有sudo节点服务器,也许你可以尝试设置IP端口从端口80转发到1024以上的端口。请参阅我可以运行具有低特权的Node.JS吗?

我们主要使用http-proxy来在单个IP之后有多个后端服务器,但我们也使用它来转发https到http。 它加强了我们的应用程序。

安全方面,你可能对http-proxy的质量比你的应用更有信心。 由nodejitsu构build的代理已经准备好生产了,而且对于代理来说,在http代理(而不是你自己的应用)上获得权限(比如读取私钥文件)应该很难(当然这取决于你的安全开发技能和你的信任在开源的http-proxy项目中)。