如果有很多小型网站(大约300个)在轻量级网站上运行,他们是否应该使用同一个池,还是为每个池设置单独的池?
让我们假设这些网站是可信的,并且在池中拥有一个单独的用户/组(例如,更好地控制访问/权限)在这里不被考虑。
通常,我更喜欢每个网站使用一个池(但也许不在这里,全部阅读)。
主要的原因是允许每个网站的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池,最终可能会有多个文件在不同池中具有相同的path,而apc只会存储一个caching版本的文件。 事实上,在apc + chroot的情况下,最好的解决scheme是运行多个php-fpm实例,每个实例一个池。 300个网站不是一件容易的事情。
然后,您可以pipe理每个网站使用pool pm.[static/dynamic]设置可以使用多less个php进程。 请注意,对于300个小型网站, 这可能会成为一个问题 ,如果大量的网站不活跃,那么你的内存的很大一部分将被游泳池进程使用,什么都不做。
在你的情况下,stream量低,网站很轻,所以超过300(至less)池的过程在你的盒子上运行,什么都不做,是一个矫枉过正的事情。 在你的具体情况下,我想我会使用less量的池(也许你可以一起组织一些网站,由应用程序?按版本?按需求?),让每个池可以运行多个网站。 或者也许只有一个,我会尝试使用网站组来应用一些open_basedir限制他们,但如果他们都是一样的,你可以运行一个池只。