0

PHP中,我可以有一个php-fpm实例来服务多个站点。我的nginx配置看起来像这样:

upstream backend 
{
  server 127.0.0.1:9000;
}

# site 1
server 
{
  server_name www.site1.com;
  root /var/www/site1;

  location ~ \.php$ 
  {
    include fastcgi_params;
    fastcgi_pass backend;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}


# site 2
server 
{
  server_name www.site2.com;
  root /var/www/site2;

  location ~ \.php$ 
  {
    include fastcgi_params;
    fastcgi_pass backend;     # still the same backend
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}

我在Ruby世界中看到的是,对于每个应用程序,都会启动一个单独的独立服务器,该服务器侦听特定端口并且只能处理对该应用程序的请求。所以我想知道,是否有可能对Ruby应用程序采用与上面的PHP相同的方法。

我知道这对于高流量网站可能不是一个好主意,但我实际上正在处理相当低流量的网站,而且我的VPS的RAM有限。

4

2 回答 2

1

恐怕不是。Rails 的运行时模型与 php 有点不同。使用 php,一切都被加载并执行,然后再次被删除。每个请求之间没有共享任何内容。这意味着同一个进程可以为来自完全不同的应用程序的请求提供服务。在 Rails(或 Sinatra)设置中,有一个应用程序进程正在运行,它响应请求。这个过程启动起来比较繁重,因此为每个请求设置和拆除是不可行的。结果是您需要接受这些进程即使在它们不工作时也会挂在系统资源上。

于 2013-08-18T20:38:28.693 回答
0

是的,使用 fpm 是可能的,转到/etc/php5/fpm/pool.d,你会发现www.conf,将它复制到一个新文件,比如说site2.conf,然后你需要更改两件事,首先是池名称,你会在 之间找到它[name],然后是listen命令,你会在9000上找到,比如改成9001,或者你可以做一个sock文件,我一般比较喜欢那个方法,然后保存文件重启服务,就这样了,我也建议你看看剩下的该文件,它有很多有趣的功能。

我个人在我的 VPS 上使用了这个配置一段时间,多个池没有什么好处,我为每个域/子域/网站配置了一个池,每个都可以有它的配置,比如 runner 用户名(避免了我的日志权限问题和缓存文件由 www 或 php 或其他东西拥有),还可以根据流量配置每个有多少等待服务的孩子,初始数量的孩子和最大数量,对我来说也很容易看到哪个网​​站正在吃东西资源,top因为我会查看进程的所有者用户。

于 2013-08-18T21:45:56.533 回答