Изначально веб-сервер был спроектирован таким образом, что создавал отдельный процесс для обработки каждого запроса. Высокая нагрузка на вебсервер при этом неизбежно влекла высокую загрузку процессора системы и значительно снижала скорость ее реакции. Процессы httpd были способны свести к минимуму жизнедеятельность всей системы.
В Apache применяется иной подход. Пул процессов запускается при загрузке (приведенная ранее команда ps отражает набор процессов httpd, работающих в системе Solaris), и рабочая нагрузка распределяется между процессами пула. Если все долгоживущие процессы httpd заняты обработкой, сервер порождает дополнительные процессы, принимающие на себя часть нагрузки. За управление пулом порожденных процессов в Apache отвечают пять инструкций настройки.
MinSpareServers - Определяет число постоянных свободных процессов сервера. В настройках Solaris принято значение 5, то есть значение по умолчанию в дистрибутиве Apache. Если число свободных процессов опускается ниже пяти, создается дополнительный процесс, и число таких процессов восстанавливается. Пять процессов - разумное значение для среднего сервера; оно позволяет обрабатывать серии из пяти запросов подряд, не заставляя клиента ожидать, пока запустится порожденный процесс. Для сервера с небольшой загрузкой можно использовать меньшее число, а серверу с высокой загрузкой может быть полезно более высокое значение. Однако нет смысла держать большое число свободных процессов, если они никогда не будут востребованы.
MaxSpareServers - Определяет максимально допустимое число свободных процессов сервера. Данная инструкция предотвращает бездействие слишком большого числа процессов. Если число свободных процессов превышает значение MaxSpareServers, лишние свободные процессы принудительно завершаются. В настройке для Solaris MaxSpareServers получает значение 10, то есть значение по умолчанию в дистрибутиве Apache. Значение MaxSpareServers рекомендуется выбирать таким образом, чтобы оно превышало значение MinSpareServers примерно в два раза.
StartServers - Определяет число демонов httpd, запускаемых при загрузке. В настройке для Solaris StartServers получает значение 5. Действие этой инструкции напрямую отражается на выводе команды ps, приводившемся ранее в этой главе и содержавшем сведения о шести процессах демона httpd. Один из этих процессов - родительский, он управляет пулом; пять других процессов - порожденные, они и занимаются обработкой запросов данных, поступающих от клиентов.
MaxClients - Определяет максимальное число обращений от клиентов, обслуживаемых единовременно. После превышения значения MaxClients поступающие запросы на HTTP-соединения не обслуживаются. В Solaris данный параметр принимает значение 150, которое наиболее широко распространено. MaxClients не позволяет серверу использовать все ресурсы системы при получении чрезмерно большого числа запросов. Значение MaxClients можно увеличивать лишь на сверхпроизводительной системе с быстрыми дисковыми накопителями и большим объемом памяти. Как правило, справляться с ростом числа клиентов лучше путем увеличения числа серверов. Верхний порог для MaxClients определяется значением HARD_SERVER_LIMIT, которое указывается при компиляции Apache. По умолчанию HARD SERVER LIMIT равно 256.
MaxRequestsPerChild - Определяет, сколько запросов может обработать порожденный процесс, прежде чем будет завершен. В Solaris MaxRequestsPerChild принимает значение 0, «неограниченное», то есть порожденный процесс может обрабатывать поступающие от клиентов запросы, пока работает система. В данной инструкции всегда следует указывать значение 0, за исключением случаев, когда достоверно известно, что библиотека, использовавшаяся для компиляции Apache, подвержена утечкам памяти.
Инструкции User и Group определяют идентификатор пользователя (UID) и группы (GID), с полномочиями которых выполняется пул процессов httpd. Когда httpd запускается при загрузке системы, то, обладая полномочиями суперпользователя, устанавливает связь с портом 80 и запускает группу порожденных процессов, которые занимаются обслуживанием запросов. Именно этим порожденным процессам присваиваются идентификаторы UID и GID, определенные в файле httpd.conf. UID и GID следует выбирать таким образом, чтобы веб-сервер получил минимальные права доступа к системе. В операционной системе Solaris устанавливается уровень доступа пользователя nobody и группы nobody. Это ясно видно из вывода последней команды ps. Один процесс httpd принадлежит пользователю root, а еще пять процессов httpd - пользователю nobody. Альтернативой использованию пользователя/ группы nobody является создание идентификатора пользователя и группы специально для httpd. Выбрав этот путь, будьте особенно внимательны при создании прав доступа к файлам для учетной записи демона. Преимущество создания специального пользователя и группы для httpd в том, что можно использовать групповые права для повышения защищенности, а также снимается зависимость от общесистемных полномочий nobody.