【问题标题】:Hosting PHP and Node.js apps on the same server with multiple domains在具有多个域的同一服务器上托管 PHP 和 Node.js 应用程序
【发布时间】:2012-12-10 08:45:22
【问题描述】:

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

【问题讨论】:

    标签: node.js dns lighttpd iptables vhosts


    【解决方案1】:

    汤姆怎么了!?

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

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

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

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

    【讨论】:

      【解决方案2】:

      我遇到了基本相同的问题,最终我使用了node-http-proxy(在 npm 中也可以使用 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 来管理我的节点实例。

      【讨论】:

        【解决方案3】:

        你会恨我的……

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

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

        【讨论】:

          猜你喜欢
          • 2013-10-15
          • 1970-01-01
          • 2018-11-18
          • 1970-01-01
          • 2014-04-19
          • 1970-01-01
          • 1970-01-01
          • 2017-02-16
          • 1970-01-01
          相关资源
          最近更新 更多