1

我有一个 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 服务器之间进行代理,但我可能是错的。

4

3 回答 3

1

汤姆怎么了!?

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

我正在用 nginx 作为代理做类似的事情,这很容易但不是最快的。

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

如果您想要一个“纯粹”的解决方案,您可能可以通过查看 ha-proxy 的源代码得到答案。你真的不能用 iptables 做到这一点。某些东西必须读取 HTTP 标头以确定请求来自何处以在本地路由它。

于 2012-12-23T16:53:52.013 回答
0

我遇到了基本相同的问题,最终我使用了node-http-proxy(也可以在 npm as 中获得http-proxy)。

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

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

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

于 2012-12-23T17:01:16.627 回答
0

你会恨我的...

我最终选择了第二个 IP 地址,然后按照Linode 教程设置多个静态 IP。然后,我将 lighttpd 配置为绑定到一个 IP 地址,并将 Node.js 配置为绑定到另一个 IP 地址。

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

于 2012-12-24T01:28:19.340 回答