Я хотел спросить вас о методах настройки PHP / Apache, которые вы знаете, их плюсах и минусах. Я начну сам
---------------- PHP как модуль Apache ----------------
Плюсы : хорошая скорость, так как вам не нужно каждый раз запускать exe, особенно в режиме mpm-worker . В этом режиме вы также можете использовать различные ускорители PHP, такие как APC или eAccelerator.
Минусы : если вы запускаете apache в режиме mpm-worker, вы можете столкнуться с проблемами стабильности, потому что каждый сбой в любом php-скрипте приведет к нестабильности всего пула потоков этого процесса apache. Также в этом режиме все скрипты выполняются от имени пользователя apache. Это плохо для безопасности. Для конфигурации mpm-worker требуется PHP, скомпилированный в поточно-безопасном режиме. По крайней мере, репозитории CentOS и RedHat по умолчанию не имеют поточно-ориентированной версии PHP, поэтому в этих ОС вам необходимо самостоятельно скомпилировать хотя бы PHP (есть способ активировать рабочий mpm на Apache). Использование потоковых бинарных файлов PHP считается экспериментальным и нестабильным. Кроме того, многие расширения PHP не поддерживают многопоточный режим или не были хорошо протестированы в поточно-безопасном режиме.
---------------- PHP как CGI ----------------
Похоже, что это самая медленная конфигурация по умолчанию, которая сама по себе является "против";)
---------------- PHP как CGI через mod_suphp ----------------
Плюсы : suphp позволяет выполнять php scipts от имени владельца файла скрипта. Таким образом, вы можете безопасно разделять разные сайты на одном компьютере. Также suphp позволяет использовать разные файлы php.ini для каждого виртуального хоста.
Минусы : PHP в режиме CGI означает меньшую производительность. В этом режиме вы не можете использовать php-ускорители, такие как APC, потому что каждый раз, когда новый процесс создается для обработки скрипта, делает кэш предыдущего процесса бесполезным. Кстати, вы знаете способ применения ускорителя в этой конфигурации? Я слышал кое-что об использовании shm для кэширования байт-кода php. Кроме того, вы не можете настроить PHP через .htaccess файлы в этом режиме. Для этого вам нужно будет установить P ECL htscanner, если вам нужно установить различные параметры для каждого скрипта через .htaccess (директивы php_value / php_flag)
---------------- PHP как CGI через suexec ----------------
Эта конфигурация выглядит так же, как и в suphp, но я слышал, что она медленнее и менее безопасна. Практически такие же плюсы и минусы применяются.
---------------- PHP как FastCGI ----------------
Плюсы : стандарт FastCGI позволяет одному php-процессу обрабатывать несколько сценариев до того, как php-процесс будет убит. Таким образом вы получаете производительность, так как нет необходимости ускорять новый процесс php для каждого скрипта. Вы также можете использовать PHP-ускорители в этой конфигурации (см. Раздел «Минусы» для комментариев). Кроме того, FCGI, почти как suphp, также позволяет выполнять процессы php от имени какого-либо пользователя. mod_fcgid, похоже, имеет наиболее полную поддержку fcgi и гибкость для apache.
Минусы : использование php-ускорителя в режиме fastcgi приведет к высокому потреблению памяти, поскольку каждый процесс PHP будет иметь свой собственный кэш байт-кода (если только не существует какого-либо ускорителя, который может использовать разделяемую память для кеширования байт-кода. Есть ли такой?). FastCGI также немного сложен в настройке. Вам необходимо создать различные файлы конфигурации и внести некоторые изменения в конфигурацию.
Кажется, что fastcgi - это самая стабильная, безопасная, быстрая и гибкая конфигурация PHP, однако ее немного сложно настроить. Но, может быть, я что-то пропустил?
Комментарии приветствуются!
Не совсем отвечаю на ваш вопрос, но я не понимаю, что FastCGI сложно настроить. Разница заключается в том, что другие методы, которые он должен заменить (mod_php, mod_python, ...), могут потребовать переписывания части кода. Это может быть трудной частью, но для настройки Apache, по крайней мере, я считаю, что это просто. В качестве примера я тестировал приложение WSGI на python и хотел посмотреть, как оно работает со всеми протоколами, которые поддерживает WSGI. Вот файл виртуального хоста с конфигурациями для всех протоколов (с
mod_fastcgi
):Это не кажется мне сложным. Конечно, FastCGI поддерживает множество опций, и его можно настроить до смерти, но это уже другой вопрос.
Для запуска от имени другого пользователя, используйте suexec и
FastCGIWrapper
, затем он становится:И посмотрите эту ссылку для пользовательского php.ini, но вы должны быть в состоянии указать его с помощью
-initial-env
опции, т.е.источник
Хороший кандидат: Apache 2 ITK MPM
Очень хорошо поработал для одного из наших клиентов с сотнями виртуальных хостов с довольно большим количеством посетителей.
Вы получаете все плюсы от запуска PHP как модуля и разбираетесь с некоторыми минусами.
источник
Для меня вопрос в том, какова цель веб-сервера. Он обслуживает более одного виртуального хоста? Если это так, то вам нужно жертвовать производительностью ради изолированной безопасности. Да, производительность страдает, но на современном оборудовании все равно требуется довольно много трафика, чтобы вызвать серьезные проблемы с производительностью.
Если производительность так важна, запустите один сайт на VPS или выделенном сервере и настройте производительность.
источник