Назад | Перейти на главную страницу

Должен ли мы иметь один пул для множества веб-сайтов в Apache + PHP-FPM?

Если существует много небольших веб-сайтов (около 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"
(...)

Вы также можете использовать chroot режим для php-fpm, но это более сложно. И в этом случае с пулом chrooted было бы проще использовать только один пул для всех клиентов (то есть общий chroot, что не очень хорошо на самом деле). Это связано с тем, что такие вещи, как apc, совместно используются всеми пулами, а это означает, что при использовании нескольких chrooted-пулов вы можете получить несколько файлов с одинаковыми путями в разных пулах, а apc будет хранить только одну кешированную версию файла. Фактически, в случае apc + chroot лучшим решением будет запуск нескольких экземпляров php-fpm с одним пулом на экземпляр. Непросто для 300 сайтов.

Затем вы можете управлять тем, сколько процессов php можно использовать для каждого веб-сайта с пулом. pm.[static/dynamic] настройки. Обратите внимание, что для 300 небольших сайтов это может стать проблемой, если большое количество веб-сайтов с тезисами неактивно, большая часть вашей памяти будет использоваться пулом, который ничего не делает.

В вашем случае трафик низкий, а веб-сайты легкие, поэтому наличие более 300 (как минимум) процессов пула, запущенных на вашем компьютере, без каких-либо действий, является перебор. И в вашем конкретном случае я думаю, что вместо этого я бы использовал небольшое количество пулов (возможно, вы можете сгруппировать несколько веб-сайтов вместе, по приложениям? По версиям? По потребностям?), Чтобы каждый пул мог запускать несколько веб-сайтов. Или, может быть, только один, я бы попытался использовать группы веб-сайтов, чтобы применить к ним некоторые ограничения open_basedir, но если они все действительно одинаковы, вы можете работать только с одним пулом.