bobo Asked: 2014-01-14 14:51:40 +0800 CST2014-01-14 14:51:40 +0800 CST 2014-01-14 14:51:40 +0800 CST 我们是否应该在 Apache+PHP-FPM 中为多个网站设置一个池? 772 如果有许多小型网站(大约 300 个)在轻量级网络流量中运行,它们应该都使用同一个池,还是为每个站点设置一个单独的池更好? 让我们假设网站是受信任的,并且在此不考虑在池中拥有单独的用户/组的好处(例如更好地控制访问/权限)。 apache-2.2 1 个回答 Voted Best Answer regilero 2014-01-16T04:59:26+08:002014-01-16T04:59:26+08:00 通常,我更喜欢每个网站使用一个池(但可能不在此处,请阅读全部内容)。 主要原因是允许每个网站的 php 设置。这些设置可以根据网站的需要而有所不同,但也可以更好地分离网站资源。例如更改临时目录或 open_basedir_settings: (...) env[TMP] = /path/to/client/var/tmp env[TMPDIR] = /path/to/client/var/tmp env[TEMP] = /path/to/client/var/tmp env[DOCUMENT_ROOT] = /path/to/client/www php_admin_value[open_basedir] = ".:/path/to/client/www:/path/to/client/var/tmp:/path/to/client/var/log" php_admin_value[upload_tmp_dir]="/path/to/client/var/tmp" (...) 您也可以对 php-fpm 使用chroot模式,但这更复杂。在这种情况下,使用 chroot 池,可能更容易为所有客户端仅使用一个池(因此共享 chroot,这实际上不是很好)。这是因为像 apc 这样的东西是由所有池共享的,这意味着使用多个 chrooted 池,您最终可能会在不同的池中得到多个具有相同路径的文件,而 apc 只会存储文件的一个缓存版本。事实上,在 apc+chroot 的情况下,最好的解决方案是运行多个 php-fpm 实例,每个实例一个池。对于 300 个网站来说,这不是一件容易的事。 pm.[static/dynamic]然后,您可以使用池设置管理每个网站可以使用多少个 php 进程。请注意,对于 300 个小型网站,这可能会成为一个问题,如果大量这些网站不活跃,那么您的大部分内存将被不做任何事情的池进程使用。 在你的情况下,流量很低,网站很轻,所以在你的盒子上运行超过 300 个(至少)池的进程,什么都不做,是一种矫枉过正。在您的特定情况下,我想我会改为使用少量的池(也许您可以将一些网站按应用程序?按版本?按需求?),让每个池能够运行多个网站。或者可能只有一个,我会尝试使用网站组对它们应用一些 open_basedir 限制,但如果它们真的都相同,你可以只使用一个池运行。
通常,我更喜欢每个网站使用一个池(但可能不在此处,请阅读全部内容)。
主要原因是允许每个网站的 php 设置。这些设置可以根据网站的需要而有所不同,但也可以更好地分离网站资源。例如更改临时目录或 open_basedir_settings:
您也可以对 php-fpm 使用chroot模式,但这更复杂。在这种情况下,使用 chroot 池,可能更容易为所有客户端仅使用一个池(因此共享 chroot,这实际上不是很好)。这是因为像 apc 这样的东西是由所有池共享的,这意味着使用多个 chrooted 池,您最终可能会在不同的池中得到多个具有相同路径的文件,而 apc 只会存储文件的一个缓存版本。事实上,在 apc+chroot 的情况下,最好的解决方案是运行多个 php-fpm 实例,每个实例一个池。对于 300 个网站来说,这不是一件容易的事。
pm.[static/dynamic]
然后,您可以使用池设置管理每个网站可以使用多少个 php 进程。请注意,对于 300 个小型网站,这可能会成为一个问题,如果大量这些网站不活跃,那么您的大部分内存将被不做任何事情的池进程使用。在你的情况下,流量很低,网站很轻,所以在你的盒子上运行超过 300 个(至少)池的进程,什么都不做,是一种矫枉过正。在您的特定情况下,我想我会改为使用少量的池(也许您可以将一些网站按应用程序?按版本?按需求?),让每个池能够运行多个网站。或者可能只有一个,我会尝试使用网站组对它们应用一些 open_basedir 限制,但如果它们真的都相同,你可以只使用一个池运行。