NodeJS端口代理或Apache重定向 - 这对我的开发工作流程最有效?

时间:2013-11-21 00:31:30

标签: php node.js apache linode server-administration

我在Ubuntu上运行ZPanel(托管LAMP堆栈安装)的专用VPS。这允许我轻松地将域和PHP网站添加到我的服务器,并将它们中的每一个沙箱分别到不同的ftp登录+ mysql用户,这非常棒。

今天我开始搞乱一些NodeJS应用。我对这些应用程序的速度印象非常深刻,所以我想我会把它们扔到我的服务器上。我按照惯例在zpanel中创建了一个新的托管帐户,然后在SSH终端中启动了应用程序。正如预期的那样,NodeJS应用程序运行顺畅,我仍然可以通过单独的FTP登录更新其代码,就像我现有的PHP站点一样 - 非常棒!

所有这些都很好,但现在是棘手的部分:让NodeJS和Apache在同一台服务器上并行运行......

问题是我的NodeJS应用程序在端口8080(用户定义)上运行,而Apache在端口80上运行(默认情况下)

e.g。 http://domain.com/:8080< - 在网址中拥有端口显然让用户感到困惑。

拥有任何新的nodejs应用程序&的最佳解决方案是什么?可从http://newdomain.com/访问的PHP网站以及可从http://domain1.com/http://domain2.com/http://domain3.com/访问的任何现有PHP网站,而不是使用该端口?

这些是我到目前为止提出的选项:

  1. 在Apache上为每个运行Node应用程序的域创建'sites-available'文件(默认情况下,ZPanel不会创建此文件)。我猜这是最简单的选择,但I've read that proxying from apache to Node is a speed & performance bottleneck因为Apache在每个请求上产生了额外的进程,然后Node也在进行处理。

  2. 更改所有Apache网站以运行端口8080并使节点在端口80上运行。然后运行带有Node的代理(在端口80上 - 默认的http端口),它将客户端重定向到正确的url +端口,具体取决于他们访问的域。 (是否有可能为连接到服务器的所有域全局运行节点应用程序?)这似乎是最耗时的选项,但是性能不会大大提高,而且我当前的托管架构仍然可以运行得很好吗?

  3. 我还没有想到的其他任何选项?

  4. 请记住:我在不同的域上运行每个网站(Node或PHP)。我没有遇到像这样复杂的解决方案,所以我认为这是一个非常有趣的问题,因为我确信其他一些人会对这样的工作流感兴趣(尤其是集成了git!)

    请询问此问题是否需要进一步说明,如有必要,我会进行编辑。

    提前致谢。

2 个答案:

答案 0 :(得分:0)

绝对通过Apache代理您的Node服务器。 Apache不仅可以比Node更快地提供静态文件,但它实际上并不是一个瓶颈 - 相反,事实并非如此。 (虽然Nginx is definitely my preferred option。)

尝试使用Apache Benchmark!

$ ab -c 1000 -n 5000 http://127.0.0.1/

我的个人号码是:

  • 静态Nginx文件的22,281个请求/秒
  • 节点
  • 5,514个请求/秒
  • 通过Nginx
  • 节点的4,729个请求/秒

如果你正在寻找更高的东西,Haskell的Warp大约需要12,000 /秒。 :)

答案 1 :(得分:0)

如果没有超级用户权限,您可能无法在端口80上运行节点,并且为您的节点应用程序提供这种功能并不是一个好主意。让apache或(也是我的首选)nginx监听80并传递请求更安全。 (对于套接字来说,nginx也更友好,有一天你会想要那些)。

现在,在我的开发盒上,我已经为apache和节点应用程序提供了nginx代理。因为你不能有太多的服务器,我说;)