Apache MPM ITK: FastCGI vs MPM-ITK

archive view archive save

article Что быстрее? FastCGI или Apache MPM ITK? Какое решение выбрать для разграничения прав пользователей на httpd процессы сервера? mod_peruser, mod_suphp, fastcgi ил Apache MPM ITK?

Все эти модули веб-сервера Апаче (mod_peruser, mod_suphp, fastcgi) применяются для разграничение прав на файлы и каталоги между различными пользовательскими PHP процессами и собственно сервером Apache и все они оказывают влияние на производительность.

По умолчанию подключенный PHP работает под mod_php (mod_php5) от имени пользователя с логином Apache или www-data и все каталоги или файлы создаются с правами этого пользователя.

Когда мы подключимся по ФТП от имени другого пользователя (например от имени пользователя vasya), не пользователя root, и попытаемся перезаписать или удалить файл или каталог принадлежащий пользователю Apache или www-data, то нам этого недадут сделать.

Чтобы неиспользовать пользователя root и в тоже время не иметь проблем с загрузкой файлов, нам нужно использовать mod_peruser, mod_suphp, fastcgi или Apache MPM ITK, которые помогут запускать PHP процессы от имени конкретного пользователя.

Описание Apache MPM ITK

Apache MPM ITK - это вариант мультипроцессорной модели (MPM) для веб-сервера Apache, который позволяет запускать httpd процесс для каждого виртуального хоста с отдельным идентификатором uid/guid. Полный перечень текущих MPM, как стабильных так и тех что в разработке, можно найти на странице Мультипроцессорные модели (MPM)

MPM-ITK модель распространяется в виде патча к Apache (apache2-mpm-itk or httpd-itk) и реализована на традиционной MPM модели PreFork (противоположность "Worker MPM"), т.е. без использования thread/нитей (ака non-threaded), это означает, что вы можете без проблем запустить любой "non-thread-aware" код (как и многие PHP расширения). С другой стороны, при использовании "non-threaded" MPM модели возможна некоторая потеря в производительности, конечно, Вы должны решить для себя, стоит это того или нет. Производительность MPM-ITK по сравнению с PreFork чуть ниже из-за того, что создается дополнительный "Fork" на каждый запрос.

Независимо от используемого решения для разграничения прав на процессы Apache, будь то mod_peruser или suphp или fastcgi, производительность будет страдать в любом случае - это вопрос выбора нименьшего зла...

Странности и предупреждения Apache MPM ITK

В то время как процесс FAST CGI (php-cgi) изначально запускается от имени нужного пользователя, Apache MPM-ITK работает как root (хотя и с некоторыми ограничениями возможностей POSIX и seccomp v2, где это возможно), только в процессе обработки запроса и определения виртуального хоста, после чего применяется setuid(). Это означает, что прежде чем запрос будет проанализирован и к нему будет применён setuid(), любое выполнение кода от имени пользователя root может содержать потенциальную брешь в безопасности. Подобное поведения вряд ли изменится в ближайшем будущем и связано со сложностями разбора запросов в ряде некоторых случаев (например mod_ssl, SSL).

Ещё одна особенность MPM-ITK: Если было выполнено подключение к HTTPD и сделан запрос, а затем в том же соединении сделан запрос от другого UID, то MPM-ITK просто закроет соединение. Это совершенно законно в соответствии с RFC 2616 раздел 8.1.4, и все основные клиенты, кажется, хорошо справляются с этим, веб-сервер просто имитирует тайм-аут, а клиент просто открывает новое соединение и повторяет запрос. Тем не менее, возможно небольшое падение производительности, а следовательно, вы должны избегать включения контента из различных uids на одной и той же странице.

Обратите внимание, что MPM-ITK пока нигде не так испытывался, как, скажем, PreFork, но в тоже время начинает использоваться на некоторых сайтах в мире, как любительских так и коммерческих, которые обрабатывают по ~10 миллионов хитов в день.

FastCGI vs MPM-ITK

Долго жевать небудем, а сразу скажем, что mod_peruser, mod_suphp или Apache MPM ITK в сравнении с FastCGI отдыхают - нет никаких графиков или замеров, проверено в боевых условиях т.с. "на глаз". mod_peruser, mod_suphp или Apache MPM ITK - это ацтой! FastCGI + MPM Worker - это Решение!

Отметим, что mod_fastcgi и mod_fcgid - это разные вещи, в основном из-за условий распространения и количества обработки параллельных запросов на процесс, mod_fcgid является полностью бесплатным вариантом mod_fastcgi. Предполагается, что модуль mod_fastcgi относительно быстрее своего сородича mod_fcgid.


Об авторе
АдМинь БагоИскатель
АдМинь БагоИскатель ярый борец за безглючную работу любых механизмов и организмов во всей вселенной и потому пребывает в вечном поиске всяческих багов, а тот кто ищет как известно всегда находит. Когда что-то или кого-то вылечить не в состоянии, то со словами "Я в аду, а вы все черти" уходит в запой выйдя из которого снова берётся лечить неизлечимое.
Ещё статьи автора
Комментарии в блоге
Новое на форуме