lighttpd 和 mod_proxy 与 PHP

lighttpd 和 mod_proxy 与 PHP

我正在尝试使用 lighttpd、一些自定义 Ruby 代理、rails/ramaze(在 Thin 上运行)和 PHP 的组合来创建一个相当复杂的设置。当前设置如下:

  1. 浏览器发出请求,该请求命中 lighttpd 前端。lighttpd 使用 mod_proxy 设置,以将该请求路由到我自定义设计的众多 Ruby 代理之一。

    proxy.balance = "fair"
    proxy.server = ( "" =>
            (
                    ( "host" => "127.0.0.1", "port" => 9090 ),
                    ( "host" => "127.0.0.1", "port" => 9091 )
            )
    )
    
  2. 请求被转发到 Ruby 进程之一,然后该进程打开与运行应用程序的众多瘦实例之一的新连接。它使用一些负载平衡魔法以及联网服务器集群。

  3. 瘦实例生成页面,将其发送回代理,代理将页面发送回 lighttpd,后者将其提供给浏览器。

我的问题是,鉴于上述架构,将 PHP 支持添加到此集群的最佳方法是什么?PHP 需要在 Ruby 代理后面运行,这样我才能区分 PHP 和 Ruby 请求并将它们路由到正确的位置,但我找不到适用于 PHP 的类似瘦服务器。我是否应该在集群上手动启动 php-cgi,然后将 FCGI 支持添加到我的 Ruby 代理?或者我应该在每个服务器上启动一个新的 lighttpd 实例专门用于生成 PHP 页面(我觉得这最接近我的 Ruby 瘦模型,但我担心开销和缺乏控制)?

请记住,每个应用程序都需要被限制在自己的 *nix 帐户中,有些应用程序会占用多个服务器上的 10 多个帐户。我还需要一种方法来适当限制 PHP 应用程序使用的服务器资源量(也许每个 *nix 帐户只启动一个或两个 php-cgi 实例?)。

答案1

您可能需要 php-fpm。

在最新的 Ubuntu 版本上:apt-get install php5-fpm

安装后,您应该有一个可用的默认配置 – 如果尚未运行:/etc/init.d/php5-fpm start

php-fpm 将为您启动 PHP 进程。如果您有多个站点,请考虑使用不同的工作池。配置应为 in /etc/php/php-fpm.d(或类似)。检查您的/etc/php5/fpm.confinclude 指令。多个池允许您分离应用程序,例如以不同的方式扩展。

一旦进程运行,它们将监听 localhost:port 或 unix-domain 套接字。我猜默认是 TCP。

那么 lighttpd 中的配置应该与 thin 的配置非常相似。

如果这有帮助或者您需要进一步的指点,请告诉我!

相关内容