用于虚拟主机的 Apache + php-fpm 配置文件(池)

Posted

技术标签:

【中文标题】用于虚拟主机的 Apache + php-fpm 配置文件(池)【英文标题】:Apache + php-fpm configuration profiles(pools) for vhosts 【发布时间】:2014-04-23 16:58:47 【问题描述】:

我刚刚使用来自

的引用从 (apache + mpm_prefork) 切换到 (apache + php-fpm +mod_fastcgi)

Switching from prefork MPM to worker MPM + php-fpm on ubuntuhttp://www.garron.me/en/blog/ubuntu-lamp-apache2-mpm-worker-and-php-fpm.html

以前主要的 apache 配置在

/etc/apache2/apache2.conf

并且虚拟主机配置在

/etc/apache2/sites-available/example1.com
/etc/apache2/sites-available/example2.com
/etc/apache2/sites-available/example3.com
/etc/apache2/sites-available/examplen.com

切换到 php-fpm 后,我需要制作类似的配置文件(池) 1. high.conf 应该是默认设置,如 ma​​x_execution_time , memory_limit 和其他设置为 high。 (适用于 drupal 商务网站) 2. light.conf 设置值较低,适合轻量级普通网站。

是否可以像这样创建两个配置文件(池)并一次将这些池分配给多个站点。? 我可以删除上面提到的旧 vhost 配置文件还是必须在其中指定与池相关的设置?

更新:这是在具有标准用户/组(如 root、www-data 等)的 VPS 上,而不是用于配置具有多个用户/组的共享主机。

更新 2:进一步阅读后,我尝试了一些可能有效的方法,请纠正我。 复制默认 www.conf

cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/light.conf

sudo nano /etc/php5/fpm/pool.d/light.conf

将 php5-fpm.sock 替换为 php5-fpm-light.sock 并将 pm.* 设置更改为较低的值,例如

pm.max_children = 20 ;default www.conf value pm.max_children = 50
pm.start_servers = 2 ;default www.conf value pm.start_servers = 3
pm.min_spare_servers = 2;default www.conf value pm.min_spare_servers = 4
pm.max_spare_servers = 4;default www.conf value pm.max_spare_servers = 6
php_admin_value[memory_limit] = 32M ;default www.conf value php_admin_value[memory_limit] = 192M

所有轻量级 vhost 文件都配置为使用 php5-fpm-light.sock 的 fastcgi,所有其他 drupal 商务网站都配置为使用 php5-fpm.sock 的 fastcgi 喜欢

#light weight
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi-light -socket  /var/run/php5-fpm-light.sock -idle-timeout 30 -pass-header Authorization

#drupal commerce -idle-time-out is set to high.
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket  /var/run/php5-fpm.sock -idle-timeout 250 -pass-header Authorization

当尝试使用重新启动时

service apache2 restart && service php5-fpm restart

正在产生错误

FastCgiExternalServer:重新定义先前定义的类“/usr/lib/cgi-bin/php5-fcgi-light”

    对于上述错误是否意味着应该创建单独的池 设置相同但插座不同? 如果是,不应该增加内存消耗,因为 php_admin_value[memory_limit]? -idle-timeout 参数会覆盖 php.ini 的 max_execution_time 还是它们都是不同的设置?

对我来说,这个 apache+php-fpm+fastcgi 的主要问题是有几个配置文件,如下所示,我无法弄清楚最后哪些设置覆盖(应用)。

/etc/apache2/conf.d/php5-fpm.conf
/etc/apache2/apache2.conf
/etc/apache2/mods-available/php5.conf
/etc/php5/fpm/php-fpm.conf (might be master process config)
/etc/php5/fpm/php.ini
/etc/php5/fpm/pool.d/www.conf (might be more if multiple pools are present)  

【问题讨论】:

【参考方案1】:

我遇到了相同的“重新定义先前定义的类”的问题,解决方案是确保所有 filename 组件(例如您/usr/lib/cgi-bin/php5-fcgi)都是唯一的,包括在所有虚拟主机中.

这并不一定意味着您需要不同的套接字/端口,但如果您打算为作为单独用户运行的每个虚拟主机运行单独的 PHP-FPM 进程,也许还使用 Apache 的 suExec 函数,那么您将需要在单独的池中指定不同的套接字/端口,并将相应的值添加到 Apache 配置中的每个 VirtualHost 块。

【讨论】:

以上是关于用于虚拟主机的 Apache + php-fpm 配置文件(池)的主要内容,如果未能解决你的问题,请参考以下文章

apache2.4 + php-fpm + phpmyadmin 在 debian

试图让 PHP-FPM 工作 (Apache 2.4.33)

Apache+php-fpm

apache2.4, php-fpm, proxypassmatch "没有协议处理程序对 URL 有效.."

如何启用 Apache 的 PHP-FPM 多实例

Apache 2.4 + PHP-FPM 和授权标头