在具有多个域的相同服务器上托pipePHP和Node.js应用程序

我有一个Linode VPS,目前运行lighttpd来服务我的PHP网站,并在端口80上侦听。

我也运行Node.js,它侦听端口81,并使用websockets和HTTP与客户端进行交互。

有几个不同的域我想指向这个服务器。 理想情况下,我希望托pipePHP站点的域都与同一个lighttpd服务器交谈,而使用node.js的站点会以某种方式redirect到端口节点.js正在监听客户端不知道的情况(例如,没有30xredirect)。

example-php1.com:80 -> linodebox:80 lighttpd /var/www/example1 example-php2.com:80 -> linodebox:80 lighttpd /var/www/example2 example-node.com:80 -> linodebox:81 node.js 

有没有办法做到这一点,无论是通过设置DNS条目或调整iptables? lighttpd是否需要成为node.js的代理? websocketsfunction需要在没有任何回退的情况下工作,访问非节点域(例如example-php1.com:81 )不应公开节点应用程序。

我觉得完美的解决scheme不需要改变现有的应用程序代码,也不需要在软件Web服务器之间进行代理,但我可能是错的。

汤姆怎么了?

我推荐HA-Proxy,它是那里最高性能的代理之一,应该完成你想要做的事情。

我正在做与nginx类似的代理,这很容易,但不是最快的。

HA-Proxy的网站在这里http://haproxy.1wt.eu

如果你想要一个“纯粹”的解决scheme,你可以从ha-proxy的源代码中得到答案。 你不能用iptables来做。 有些东西必须读取HTTP头才能确定请求来自哪里以在本地路由它。

我基本上有同样的问题,我最终使用节点HTTP代理 (也可在http-proxy npm中使用)。

你只需要一个简单的configuration文件:

 {
  路由器:{
     'example-php1.com':'linodebox:80',
     'example-php2.com':'linodebox:80',
     'example-node.com':'linodebox:81
   }
 }

然后,运行node-http-proxy --config options.json并设置好。 如果你想在同一台机器上运行lighttpd和node,你必须在不同的端口上启动lighttpd(我使用81和php作为节点,调整configuration很简单)。 我也永远用来pipe理我的节点实例。

你们会恨我的

我结束了第二个IP地址,然后按照Linode教程来设置多个静态IP。 然后,我configurationlighttpd绑定到一个IP地址和Node.js绑定到另一个IP地址。

这不是一个好的解决scheme,因为它不能缩放。