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

时间:2012-12-23 16:40:14

标签: node.js dns lighttpd iptables vhosts

我有一个Linode VPS,目前正在运行lighttpd来提供我的PHP网站并在端口80上进行监听。

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

我想指出这个服务器有几个不同的域名。理想情况下,我希望托管PHP站点的域都与同一个lighttpd服务器通信,并且使用node.js的站点会以某种方式重定向到端口node.js正在侦听客户端(例如没有30x重定向) )。

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的代理? websockets功能需要在没有任何回退的情况下工作,并且访问非节点域,例如, example-php1.com:81,不应公开节点应用程序。

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

3 个答案:

答案 0 :(得分:1)

汤姆怎么了??

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

我正在做类似nginx充当代理的事情,它很容易但不是最快的。

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

如果你想要一个'纯'解决方案,你可能会从ha-proxy的源代码中得到答案。你不能用iptables真正做到这一点。有些东西必须读取HTTP标头以确定请求来自本地路由的位置。

答案 1 :(得分:0)

我基本上遇到了同样的问题,最后我使用了node-http-proxy(也在npm中以http-proxy的形式提供)。

您只需要一个简单的配置文件:

{
  router: {
    'example-php1.com': 'linodebox:80',
    'example-php2.com': 'linodebox:80',
    'example-node.com': 'linodebox:81
  }
}

然后只需运行node-http-proxy --config options.json就可以了。如果你想在同一台机器上运行lighttpd和节点,你必须在另一个端口上启动lighttpd(我使用81表示php,3000表示节点 - 调整配置很容易)。我还使用forever来管理我的节点实例。

答案 2 :(得分:0)

你会恨我...

我最后使用第二个IP地址,然后按Linode tutorial设置多个静态IP。然后,我将lighttpd配置为绑定到一个IP地址,并将Node.js绑定到另一个IP地址。

这不是一个很好的解决方案,因为它不能扩展。

相关问题