我正在尝试使用 lighttpd、一些自定义 Ruby 代理、rails/ramaze(在 Thin 上运行)和 PHP 的组合来创建一个相当复杂的设置。当前设置如下:
浏览器发出请求,该请求命中 lighttpd 前端。lighttpd 使用 mod_proxy 设置,以将该请求路由到我自定义设计的众多 Ruby 代理之一。
proxy.balance = "fair" proxy.server = ( "" => ( ( "host" => "127.0.0.1", "port" => 9090 ), ( "host" => "127.0.0.1", "port" => 9091 ) ) )
请求被转发到 Ruby 进程之一,然后该进程打开与运行应用程序的众多瘦实例之一的新连接。它使用一些负载平衡魔法以及联网服务器集群。
瘦实例生成页面,将其发送回代理,代理将页面发送回 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.conf
include 指令。多个池允许您分离应用程序,例如以不同的方式扩展。
一旦进程运行,它们将监听 localhost:port 或 unix-domain 套接字。我猜默认是 TCP。
那么 lighttpd 中的配置应该与 thin 的配置非常相似。
如果这有帮助或者您需要进一步的指点,请告诉我!