Меню

настройка httpd mpm conf

Настройка apache MPM (prefork, worker, event)

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

Про отключение неиспользуемых модулей слышали пожалуй все, а сегодня мы поговорим про MPM (Multi-Processing Modules) — prefork, worker и event.

Intro

Apache имеет модульную архитектуру, что позволяет выбрать необходимую функциональность, которая будет реализована при помощи подключаемых модулей. В Apache 2.0 модульная архитектура была расширена наиболее общими функциями веб-сервера. Теперь сервер поставляется с набором мульти-процессных модулей (MPM), ответственных за сетевое соединение, за прием запросов и за координацию их обработки дочерними процессами.

Для Unix систем для определения какой-же модуль можно использовать можно воспользоваться таблицей:

В системе есть поддержка event worker prefork
threads + +
thread-safe polling (kqueue и epoll) +

Фактически это означает, что для Unix почти всегда будет доступен event, так как все современные операционные системы поддерживают эти две функции. *PHP по умолчанию не поддерживает thread safe, поэтому если вам нужен mod_php — используйте prefork.

Для проверки какой модуль используется в данным момент можно использовать команды:

По умолчанию в Apache 2.4 подключен модуль prefork.

Prefork

При использовании модуля prefork каждый запрос обслуживается отдельным процессом Apache. Основное преимущество prefork — стабильность, процессы изолированы друг от друга и ошибки при обработке одного запроса ни как не затронут другие запросы. Родительский процесс отвечает за запуск дочерних процессов, которые обслуживают соединения. Apache старается всегда держать в резерве несколько процессов (обычно их называют spare или idle процессы) для того чтобы клиенты не ждали пока запустится дочерний процесс для обслуживания их запроса.

Одна из важнейших директив для настройки этого MPM — MaxRequestWorkers (или MaxClients для версий ниже 2.3.13). Фактически она определяет максимальное количество одновременно обслуживаемых клиентов и соответственно от этой директивы зависит максимальное потребление RAM.

Пример конфигурационного файла (Apache/2.2.15 Centos 6)

StartServers: число процессов, которые запустятся при старте Apache.
MinSpareServers: минимальное количество процессов, которые держатся в резерве.
MaxSpareServers: максимальное количество процессов, которые держатся в резерве.
ServerLimit: максимальное количество процессов Apache (в целом).
MaxClients: максимальное число одновременных клиентских соединений (в разрезе prefork = максимальному количеству дочерних процессов).
MaxRequestsPerChild: максимальное количество запросов, после которых дочерний процесс будет перезапущен (позволяет нивелировать эффект от memory leak).

Для базовой настройки необходимо поменять только MaxClients (MaxRequestWorkers) и ServerLimit, остальные параметры на первом этапе можно оставить по умолчанию.

Расчет MaxClients (MaxRequestWorkers)

Допустим нам необходимо выделить 512Mb для Apache. Для этого выясняем сколько RAM потребляет один процесс Apache (только по одному этому пункту можно написать отдельную книгу, но для начала нам хватит метода описанного далее): запускаем ps и выясняем pid дочернего процесса (родительский будет запущен от пользователя root), далее запускаем pmap и смотрим параметр writeable/private, в примере это 1776K (1.7Mb).

Дальше все просто: 512/1.7 = 301 — вот значение для ServerLimit и MaxClients (MaxRequestWorkers). В реальности будут другие цифры, в примере использовался свежеустановленный Apache без нагрузки и без mod_php, и лучше брать среднее значение от потребления RAM всеми дочерними процессами, а не значение одного случайного процесса и проводить замеры во время наибольшей нагрузки или во время нагрузочного тестирования. Если вы еще не знаете какая будет нагрузка и сколько будет потреблять RAM один процесс, то ориентируйтесь на цифру в 25Mb — 35Mb (если планируете использовать mod_php), для начала этого хватит, позже вернетесь к этому параметру.

Для того чтобы узнать количество запущенных процессов Apache в текущий момент можно воспользоваться командой:

Worker

Worker сочетает в себе мульти-процессовый (multi-process) и мульти-поточный (multi-threaded) сервер. Использование потоков (threads) позволяет обслуживать больше запросов при меньших аппаратных ресурсах чем просто мульти-процессовый сервер (prefork). Тем не менее, он сохраняет большую часть стабильности мульти-процессового сервера, используя несколько процессов, каждый из которых имеет множество потоков.

Как это работает:
— родительский процесс отвечает за запуск дочерних процессов;
— каждый дочерний процесс создает фиксированное количество потоков, установленных директивой ThreadsPerChild и один слушающий поток (listener thread), который принимает новые соединения и передает их рабочим потокам;
— Apache постоянно пытается поддерживать пулл резервных потоков, которые готовы обслужить входящие запросы, как только они поступят. В этом случае клиенту не придется ждать создания нового потока или процесса.

Пример конфигурационного файла (Apache/2.2.15 Centos 6)

StartServers: число процессов, которые запустятся при старте Apache.
MaxClients: максимальное число одновременных клиентских соединений (в разрезе worker = максимальному количеству потоков).
MinSpareThreads: минимальное количество потоков, которые держатся в резерве.
MaxSpareThreads: максимальное количество потоков, которые держатся в резерве.
ThreadsPerChild: количество потоков на один процесс.
MaxRequestsPerChild: максимальное количество запросов, после которых дочерний процесс будет перезапущен (позволяет нивелировать эффект от memory leak).
ThreadLimit: максимальное число потоков для одного процесса (не может быть изменена без перезапуска сервера apache, в отличии от ThreadsPerChild)

Может возникнуть ситуация, при которой процесс достигший MaxRequestsPerChild будет ожидать завершения и перестанет принимать новые соединения, но у него будет один поток, который все еще обрабатывает клиентское соединение. Так мы можем достигнуть порог MaxClients (MaxRequestWorkers), хотя фактически клиентских запросов обрабатывается гораздо меньше. Чтобы избежать такого поведения сервера можно установить MaxRequestsPerChild в 0 и MaxSpareThreads = MaxClients (MaxRequestWorkers).

Расчет ServerLimit и MaxClients (MaxRequestWorkers)

Схема остается прежней, смотрим потребление RAM одним процессом, рассчитываем ServerLimit. MaxClients (MaxRequestWorkers) рассчитываем как ServerLimit * ThreadsPerChild.

Event

Event позволяет обслуживать большое количество одновременных соединений путем передачи части работы по обработке запроса отдельным потокам (listeners threads).

Этот MPM призван исправить проблему «keep alive» в HTTP. После того, как клиент выполнит первый запрос, он может оставить соединение открытым, отправляя будущие запросы используя тот же самый сокет избегая накладных расходов при установлении нового TCP-соединения. В случае prefork и worker Apache сохраняет дочерний процесс / поток, ожидающий данных от клиента, что приводит к неэффективному расходу ресурсов. Чтобы решить эту проблему, event использует выделенный поток (listener thread) для каждого процесса для обработки сокетов в состоянии Listening, Keep Alive и сокетов, для которых осталось только передать данные клиенту. Таким образом рабочий поток получает уже готовый запрос и освобождается сразу после его обработки.

Директивы остаются такими же как и у MPM worker, принцип расчета RAM остается тот же.

источник

Мой опыт настройки Apache x64 под Windows 8.1 x64

Доброго времени суток, уважаемые читатели. В этой статье я хочу поделиться с вами личным опытом настройки Apache под Windows 8.1 x64.
Было время – установил я себе Windows 8.1 и думаю, раз уж пошло на то, «дай ка» Я и Apache подниму! И как обычно меня он очень порадовал (табличка: «Сарказм»). Пришлось повозиться почти целую ночь, чтобы поднять сервер. И мне это удалось! После этого я решил тем самым написать небольшую статью по настройке Apache, чтобы другой человек не тратил на это столько же времени, сколько Я.
После нескольких минут раздумий, решил написать пошаговую инструкцию, которая будет состоять из нескольких разделов:

  1. Подготовка папок
  2. Настройка Apache
  3. Настройка PHP
  4. Настройка MySQL
  5. Устанавливаем phpMyAdmin

Ну что ж, приступим.

Подготовка папок

Настройка Apache

# директория с нашими сайтами
DocumentRoot “C:/Server/domains”
# индексные файлы, по приоритету.

DirectoryIndex index.php index.html index.htm index.shtml

# папка для log-файлов
ErrorLog “C:/Server/domains/logs/error.log”
CustomLog “C:/Server/domains/logs/access.log”
# добавим alias для phpMyAdmin, и поправим alias для cgi

Alias /pma “C:/Server/domains/phpMyAdmin”
ScriptAlias /cgi-bin/ “C:/Server/web/apache/cgi-bin/”

# правим путь для cgi

AllowOverride None
Options None
Require all granted

# типы файлов


AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

# Другие конфиги:
Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-autoindex.conf
Include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-manual.conf
Include conf/extra/httpd-default.conf

BrowserMatch «MSIE 10.0;» bad_DNT

RequestHeader unset DNT env=bad_DNT

На этом заканчивается настройка httpd.conf.
В конфигурационном файле Apache httpd.conf были подключены дополнительные конфиги:
Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-autoindex.conf
Include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-manual.conf
Include conf/extra/httpd-default.conf
Откроем файл «C:\Server\web\apache\conf\extra\httpd-mpm.conf» и быстро пробежимся по нему.
# указываем, где у нас будет храниться pid-файл:

PidFile “C:/Server/web/apache/logs/httpd.pid”

Остальные параметры оставляем без изменений. Откроем файл «httpd-autoindex.conf», изменим там только строки с путем:
Alias /icons/ «c:/Server/web/apache/icons/»

Options Indexes MultiViews
AllowOverride None
Require all granted

Далее переходим к файлу «httpd-vhosts.conf», удаляем его содержимое. После того, как мы это сделали, начинаем наполнять его заново:

# добавим для будущего phpMyAdmin (не забываем создать папку)

DocumentRoot «C:/Server/domains/phpmyadmin/public_html»
ServerName localhost
ErrorLog «C:/Server/domains/phpmyadmin/logs/error.log»
CustomLog «C:/Server/domains/phpmyadmin/logs/access.log» common

На этом редактирование файла заканчивается. Далее в оставшихся файлах правим только пути:
Файл «httpd-manual.conf»:
AliasMatch ^/manual(?:/(?:da|de|en|es|fr|ja|ko|pt-br|ru|tr|zh-cn))?(/.*)?$ «C:/Server/web/apache/manual$1»

В файле «httpd-default.conf» никаких изменений не производиться. На этом настройка конфигурации Apache завершается.

Настройка PHP

Настройка MySQL

Ставим MySQL x64 как сокет под windows. Скачиваем архив с последней версией MySQL x64:
dev.mysql.com/downloads/mysql
В низу страницы находим Windows (x86, 64-bit), ZIP Archive и жмем на кнопку «Download». Вам перекинет на страницу регистрации на сайте. Нажимаем внизу страницы «No thanks, just start my download», запуститься скачивание архива MySQL. После того как скачался архив откроем его и перенесем все содержимое папки в «C:\Server\web\mysql\»
Теперь открываем файл настроек MySQL – «C:\Server\web\mysql\my-default.ini». Удаляем все его содержимое и вносим туда свои данные.
[client]
port=3306
host=127.0.0.1
[mysqld]
port=3306
bind-address=127.0.0.1
enable-named-pipe
basedir=»C:/Server/web/mysql/»
datadir=»C:/Server/web/mysql/data/»
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Вот и всё. В конфигурационном файле мы указали, что скрипты могут обращаться к серверу и по локальному IP, и по сокет-соединению.
Осталось дело за малым. Добавим в системную переменную «PATH» пути к Apache и MySQL, для этого:

  1. Перетащите курсор мыши в правый нижний угол экрана
  2. Щелкните на значке «Поиск» и введите: панель управления
  3. Выберите System (Система)-> Advanced (Дополнительные параметры системы)
  4. Выберите Environment Variables (Переменные среды), в меню System Variables (Системные переменные), найдите переменную PATH и щелкните на ней.
  5. Пропишите пути к Apache и MySQL:

;C:\Server\web\apache\bin;C:\Server\web\mysql\bin
Далее установим службы Apache и MySQL. Для этого воспользуемся сочетанием клавиш «Win+X», появиться выпадающее меню в левом нижнем углу. Выберем «Командная строка (администратор)».
В командной строке вводим, для установки Apache:
httpd –k install
для установки MySQL:
mysqld.exe —install MySQL —defaults-file=”C:\Server\web\mysql\my-default.ini”
Установим пароль для MySQL-пользователя. Для этого запустим службу MySQL командой:
NET start MySQL
После того как служба запустилась, установим пароль:
mysqladmin –u root password ВашПароль
В файл «httpd-vhosts.conf» мы прописали два сайта, для того чтобы браузер мог их увидеть, названия сайтов нужно добавить в файла «hosts». Перейдем в папку:
C:\Windows\System32\Drivers\etc\
откроем файл «hosts» любым текстовым редактором (запустить от имени администратора) и в конец файла добавим:
127.0.0.1 localhost
127.0.0.1 phpmyadmin
Сохраняем файл.
Для удобства запуска и остановки служб Apache и MySQL создадим файлы start-server.bat и stop-server.bat.
Для этого перейдем в папку «C:\Server\» и создадим два этих файла.
Содержание «start-server.bat»:
@echo off
NET start Apache2.4
NET start MySQL
Содержание «stop-server.bat»:
@echo off
NET stop Apache2.4
NET stop MySQL
Настройка Apache, PHP и MySQL на этом закончена. Для того чтобы протестировать сервер, давайте в папке «C:\Server\domains\localhost\public_html» создадим файл «index.php» с содержимым:

Далее запустим наш сервер, для этого запустите «start-server.bat» от имени администратора. После того как сервер запустился, откройте браузер и введите в адресной строке «localhost».
Должна отобразиться страница с информацией о PHP.

Устанавливаем PhpMyAdmin

Скачиваем последнюю версию PhpMyAdmin отсюда:
www.phpmyadmin.net/home_page/index.php
Открываем скаченный архив и переносим содержимое его папки в папку для нашего домена «C:\Server\domains\phpmyadmin\public_html\».
Находим файл «config.sample.inc.php», делаем его копию и переименовываем копию в «config.inc.php». Открываем файл текстовым редактором и меняем данные:

Сохраняем и закрываем файл. Открываем в браузере сайт «http://phpmyadmin» и наслаждаемся.

Статья получилась объемная, но надеюсь полезная.

источник

Читайте также:  винда при установке не завершает установку