Apache+PHP-FPM에서 여러 웹사이트에 대해 하나의 풀을 가져야 합니까?

Apache+PHP-FPM에서 여러 웹사이트에 대해 하나의 풀을 가져야 합니까?

웹 트래픽이 적은 소규모 웹사이트(약 300개 정도)가 많이 실행되고 있다면 모두 동일한 풀을 사용해야 할까요, 아니면 각각 별도의 풀을 두는 것이 좋을까요?

웹사이트가 신뢰할 수 있고 풀에 별도의 사용자/그룹을 두는 것의 이점(예: 액세스/권한에 대한 더 나은 제어)은 여기에서 고려되지 않는다고 가정해 보겠습니다.

답변1

일반적으로 저는 웹사이트당 하나의 풀을 사용하는 것을 선호합니다(하지만 여기에서는 아닐 수도 있습니다. 모두 읽어보세요).

그 주된 이유는 웹사이트별 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"
(...)

당신은 또한chrootphp-fpm 모드이지만 더 복잡합니다. 그리고 이 경우 chrooted 풀을 사용하면 모든 클라이언트에 대해 하나의 풀만 사용하는 것이 더 쉬울 수 있습니다(따라서 공유 chroot는 사실 별로 좋지 않습니다). 이는 apc와 같은 것이 모든 풀에서 공유되기 때문입니다. 즉, 여러 개의 chroot된 풀을 사용하면 서로 다른 풀에서 동일한 경로를 갖는 여러 파일이 생길 수 있으며 apc는 파일의 캐시된 버전 하나만 저장한다는 의미입니다. 실제로 apc+chroot의 경우 가장 좋은 솔루션은 인스턴스당 하나의 풀을 사용하여 여러 개의 php-fpm 인스턴스를 실행하는 것입니다. 300개의 웹사이트에는 쉬운 일이 아닙니다.

그런 다음 풀 설정을 통해 각 웹사이트에 사용할 수 있는 PHP 프로세스 수를 관리할 수 있습니다 pm.[static/dynamic]. 300개의 소규모 웹사이트의 경우이게 문제가 될 수 있어, 많은 수의 웹사이트가 활성화되지 않은 경우 아무 작업도 수행하지 않는 풀 프로세스에서 메모리의 상당 부분을 사용하게 됩니다.

귀하의 경우 트래픽이 적고 웹 사이트가 가벼우므로 최소한 300개 이상의 풀 프로세스가 귀하의 상자에서 실행되고 아무것도 하지 않는 것은지나침. 그리고 귀하의 특별한 경우에는 대신에 적은 수의 풀(일부 웹 사이트를 응용 프로그램별, 버전별, 필요에 따라 그룹화할 수 있음)을 사용하여 각 풀에서 여러 웹 사이트를 실행할 수 있다고 생각합니다. 아니면 단 하나만, 웹 사이트 그룹을 사용하여 open_basedir 제한을 적용하려고 시도하지만 모두 동일하다면 하나의 풀로만 실행할 수 있습니다.

관련 정보