
Wenn viele kleine Websites (ca. 300) mit geringem Web-Verkehr ausgeführt werden, sollten sie alle denselben Pool verwenden oder wäre es besser, für jede von ihnen einen separaten Pool zu haben?
Nehmen wir an, dass die Websites vertrauenswürdig sind und die Vorteile eines separaten Benutzers/einer separaten Gruppe im Pool (z. B. bessere Kontrolle des Zugriffs/der Berechtigungen) hier nicht berücksichtigt werden.
Antwort1
Normalerweise bevorzuge ich die Verwendung eines Pools pro Website (aber vielleicht nicht hier, lesen Sie alles).
Der Hauptgrund dafür ist, dass PHP-Einstellungen pro Website möglich sind. Und diese Einstellungen können je nach den Anforderungen der Website variieren, aber auch für eine bessere Trennung der Website-Ressourcen. Wie zum Beispiel mit geänderten temporären Verzeichnissen oder 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"
(...)
Sie können auch diechrootModus für php-fpm, aber das ist komplexer. Und in diesem Fall wäre es mit einem Chroot-Pool vielleicht einfacher, nur einen Pool für alle Clients zu verwenden (also ein gemeinsam genutztes Chroot, was eigentlich nicht sehr gut ist). Das liegt daran, dass Dinge wie APC von allen Pools gemeinsam genutzt werden, und das bedeutet, dass Sie bei Verwendung mehrerer Chroot-Pools am Ende mehrere Dateien mit denselben Pfaden in verschiedenen Pools haben könnten, und APC würde nur eine zwischengespeicherte Version der Datei speichern. Tatsächlich wäre im Fall von APC+Chroot die beste Lösung, mehrere php-fpm-Instanzen mit einem Pool pro Instanz auszuführen. Keine leichte Sache für 300 Websites.
Dann können Sie mit den Pooleinstellungen verwalten, wie viele PHP-Prozesse für jede Website verwendet werden können pm.[static/dynamic]
. Beachten Sie, dass für 300 kleine Websitesdas könnte zum Problem werdenWenn eine große Anzahl dieser Websites nicht aktiv ist, wird ein großer Teil Ihres Speichers von Poolprozessen verwendet, die nichts tun.
In Ihrem Fall ist der Verkehr gering und die Anzahl der Websites gering, sodass mehr als 300 (mindestens) Poolprozesse auf Ihrer Box laufen und nichts tun, ist eineOverkill. Und in Ihrem speziellen Fall würde ich wahrscheinlich eher eine geringe Anzahl von Pools verwenden (vielleicht können Sie einige Websites nach Anwendungen gruppieren? nach Versionen? nach Bedarf?), sodass jeder Pool mehrere Websites ausführen kann. Oder vielleicht nur einen. Ich würde versuchen, Gruppen von Websites zu verwenden, um einige open_basedir-Einschränkungen auf sie anzuwenden, aber wenn sie alle wirklich gleich sind, könnten Sie nur mit einem Pool arbeiten.