Apache2 itk mpm: Модуль мультипроцессинга mpm-itk веб-сервера Apache
Модуль мультипроцессинга mpm-itk веб-сервера Apache
Ключевыми характеристиками любого веб-сервера являются производительность и безопасность. Также немаловажно и потребление ресурсов. Однако если при сравнительно небольшом его увеличении повышаются ключевые характеристики, то это является оправданным. Мультипроцессинг является основным способом, позволяющим добиться впечатляющей производительности веб-сервера. Да ещё при этом существенно повысить безопасность и надёжность его работы.
Зачем нужен мультипроцессинг для веб-сервера?
Поскольку к веб-серверу одновременно может быть направлено множество запросов. То естественно, необходимо некоторую часть из них принять в обработку. А оставшиеся запросы поместить в очередь ожидания. После того, как занятый обработкой запроса процесс освободится. Он получит следующий, находившийся в очереди запрос. И так далее. Сколько должно одновременно обрабатываться запросов, сколько должно находиться в очереди, а также стратегия распределения задач между процессами — определяется системной конфигурацией веб-сервера. Эти параметры настраиваются в ходе оптимизации и тестирования программно-аппартной платформы. На которой предполагается работа веб-сервера. Исходя из прогнозируемых нагрузок и специфики выполняемых задач.
Но дело ещё и в том, чтобы не просто обеспечить максимальную производительность веб-сервера за счёт тонкой и сбалансированной настройки мультипроцессинговой обработки, но также обеспечить выполнение каждого процесса в «индивидуальном» порядке. Это подразумевает выполнение каждого процесса от имени конкретного пользователя. Такой подход обеспечивает максимальную безопасность без потери производительности. При условии, что имеют место достаточное количество аппаратных ресурсов. А также грамотная оптимизация работы соответствующего программного обеспечения (ПО).
Как это работает?
Для организации выполнения процессов (точнее экземпляров) Apache от разных пользователей существуют различные модули. Одним из таких является модуль mpm-itk. Для дистрибутивов Ubuntu этот модуль доступен в стандартном репозитории в виде отдельного пакета под именем libapache2-mpm-itk.
Разные виртуальные хосты (соответствующие каталоги и их содержимое) могут принадлежать разным пользователям. По-умолчанию Apache для мультипроцессинговой обработки HTTP-запросов для виртуальных хостов использует определённое количество процессов-экземпляров самого себя, которые запускаются от имени одного (обычно это пользователь www-data, apache или http) пользователя. Такимы образом, по-умолчанию с конфигурацией «из коробки» Apache от имени одного пользователя обслуживает виртуальные хосты, принадлежащие разным пользователям. Это потенциальная дыра в безопасности. Частично проблема решается добавлением верифицированных пользователей-владельцев виртуальных хостов в группу Apache. Но, во-первых, это полностью не решает проблему с безопасностью, во-вторых, это очень неудобно. Как самим пользователям, так и администраторам.
Модуль mpm-itk позволяет запускать отдельные экземпляры Apache от имени того пользователя, к виртуальному хосту которого поступил HTTP-запрос. Таким образом, каждый виртуальный хост обслуживается процессом веб-сервера, запущенным от имени самого этого пользователя — владельца виртуального хоста. Данный подход снимает все противоречия в модели распределения доступа к ресурсам виртуальных хостов. Всё, что нужно — это указать веб-серверу, что тот или иной хост нужно обрабатывать от имени его владельца. Это делается путём указания соответствующих директив в конфигурационном файле виртуального хоста.
Установка mpm-itk в Linux
Поскольку в большинстве дистрибутивов Linux в стандартном репозитории уже доступны многие модули Apache, в том числе и mpm-itk, то лучше воспользоваться менеджером пакетов (или системой управления пакетами СУП) используемого дистрибутива для его (модуля) установки. Например, для Ubuntu нужно установит пакет libapache2-mpm-itk:
$ sudo apt install libapache2-mpm-itk
После этого можно перезапустить Apache:
$ sudo systemctl restart apache2
Но вообще, скрипт установки модуля должен перезапустить веб-сервер автоматически.
Если используемый дистрибутив не предоставляет готовых пакетов для модуля mpm-itk, то установку можно произвести вручную. Исчерпывающие инструкции для этого приведены на официальном сайте разработчиков модуля: http://mpm-itk.sesse.net.
Базовая настройка mpm-itk
Как уже говорилось ранее, для связывания виртуального хоста с конкретным пользователем в системе необходимо в конфигурационном файле хоста определить специальную директиву
Apache – AssignUserId user group: <IfModule mpm_itk_module> AssignUserId john john </IfModule>
Как можно видеть, директива AssignUserId определяет пользователя и группу (именно в таком порядке), указывая веб-серверу, что к данному виртуальному хосту может получить доступ процесс, принадлежащий только указанным пользователю и группе. В данном случае это пользователь john и его одноимённая группа.
Инструкция предназначена для задействования директивы AssignUserId только тогда, когда подключен соответствующий модуль, т. е. mpm-itk. Фраза «mpm_itk_module» формируется из двух составляющих: имени модуля, под которым он был подключен (в данном случае mpm_itk), а также классификатора объекта Apache – module, поскольку это подключаемый модуль. Просмотреть подключенные модули Apache (и их имена) можно в каталоге /etc/apache2/mods-enabled. А все доступные модули должны храниться в каталоге /etc/apache2/mods-available. Например, модулю mpm-itk соответствует файл mpm_itk.load.
Если теперь понаблюдать за процессами Apache, то можно убедиться, что во время обращения к пользовательскому виртуальному хосту (для которого определена директива AssignUserId) создаётся экземпляр Apache, запущенный от соответствующего пользователя.
Заключение
В заключение необходимо отметить, что модуль mpm-itk применяется в тех системах, где безопасность важнее производительности. Поскольку при использовании этого модуля процессы каждый раз при обработке виртуального хоста создаются заново и полностью уничтожаются при отсутствии к нему запросов, то ясно, что производительность от этого не увеличится. Чаще всего подобная схема используется на хостинг-площадках.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Запуск Apache от имени пользователя и выбор версии php в Ubuntu 16.04 – Vscale Community
В этой статье будут рассмотрены следующие вопросы:
- Установка apache2-mpm-itk в Ubuntu 16.04
- Выбор версии PHP в Ubuntu 16.04
Модуль apache mpm-itk позволяет запускать виртуальные хосты от имени пользователя. Кроме всего прочего, это позволяет не задумываться о выставлении дополнительных прав на те, или иные папки и файлы на ваших сайтах. Более подробную информацию о преимуществах использования данного модуля, можно найти в Интернете.
Задача выбора версии PHP в Ubuntu 16.04 актуальна тем, что по умолчанию в Ubuntu 16.04 устанавливается PHP 7, хотя большинство сайтов работают еще на PHP 5.
Установка apache2-mpm-itk
Если у вас еще не установлен apache, установите его, выполнив команду:
sudo apt install apache2
Также вы можете установить LAMP сервер, в состав которого также входит Apache2:
sudo apt install lamp-server^
Важно: обратите внимание на символ ^ в конце команды, он обязателен.
После установки Apache2 можно установить apache2-mpm-itk:
sudo apt install libapache2-mpm-itk
sudo service apache2 restart
Теперь вы можете включать в файл конфигурации ваших виртуальных хостов следующую инструкцию:
<IfModule mpm_itk_module>
AssignUserId your_user_name your_user_groupe
</IfModule>
Например:
<VirtualHost *:80>
ServerName DOMAIN
ServerAlias www.DOMAIN
DocumentRoot DOMAIN_PATH
<IfModule mpm_itk_module>
AssignUserId your_user_name your_user_groupe
</IfModule>
<Directory DOMAIN_PATH>
DirectoryIndex index.php
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ROOT_DIR/logs/error_log_DOMAIN
</VirtualHost>
Установка и выбор разных версий PHP в Ubuntu 16.04
Подключаем дополнительный репозиторий и обновляем систему:
sudo add-apt-repository ppa:ondrej/php && sudo apt update && sudo apt upgrade
Устанавливаем php5.6:
sudo apt install php5.6 php5.6-mysql php5.6-mbstring libapache2-mod-php5.6
Как вы может заметить — для установки нужных модулей php5.6 достаточно выполнить команду вида:
sudo apt install php5.6-module_name
Впрочем это справедливо и для других версий php.
Для переключения версии php с 7.0 на 5.6, на вашем сервере, необходимо выполнить следующие команды:
sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart
sudo update-alternatives --set php /usr/bin/php5.6
С версии 5.6 на 7.0:
sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart
sudo update-alternatives --set php /usr/bin/php7.0
Конфигурационные файлы для разных версий php, например 5.6, находятся по адресу:
/etc/php/5.6/apache2/php.ini
Для версии 7.0:
/etc/php/7.0/apache2/php.ini
Заключение
В этой статье вы узнали как легко и просто запускать Apache2 от имени пользователя, а также как легко и просто установить и выбрать разные версии php в Ubuntu 16.04.
В этой статье были использованы следующие материалы из сети Интернет:
Запуск виртуальных хостов от разных учетных записей [Справочно-аналитическая энциклопедия]
Ситуация: У вас сервер. Вы предоставляете хостинг для своих друзей. У них отдельные SSH/FTP аккаунты. Необходимо разграничить доступ на уровне apache. По сути, нужно, что бы Apache запускался для каждого пользователя под своим логином.
Есть решения основанные на CGI, но я предпочитаю использовать модуль apache2-mpm-itk.
<note important>Установка apache2-mpm-itk может удалить apache2 и apache2-mpm-prefork</note>
Устанавливаем:
$ sudo apt-get install apache2-mpm-itk
Далее, прописываем к каждому виртуальному хосту следующее:
<IfModule mpm_itk_module> AssignUserId USER GROUP </IfModule>
Если для виртуального хоста не будет указана эта директива, то сайт будет работает от стандартного пользователя, который установлен к файле настроек apache2 (Обычно www-data или apache2 или httpd).
Далее, необходимо установить права владения файлов у виртуальных хостов:
$sudo chown MYUSER:MYGROUP /var/www/my-virtualhost/ -R
Активировать этот модуль через a2enmod НЕ нужно.
Перезапускаем Apache2:
$ sudo /etc/init.d/apache2 reload
Пример создания директории под сайт и пользователя
Создаем новую группу:
groupadd friend
Создаем пользователя vasya в группе friend:
useradd -s /bin/false -d /home/vasya -m -g friend vasya
Для него автоматически создастся домашняя директория /home/vasya
И для его виртуального хоста добавляем строчки:
<IfModule mpm_itk_module>
AssignUserId vasya friend
</IfModule>
Ссылки
ubuntu/apache_multi_users.txt · Последнее изменение: 2017/03/23 21:59 (внешнее изменение)
настройка для работы с несколькими сайтами в Debian
В большинстве случаев, если вы имеете собственный веб-сервер с «белым» ip-адресом, то после установки Apache2 в Debian 8, сайт «заливается» в директорию /var/www/html — которая прописана в файле /etc/apache2/sites-available/000-default.conf
Однако, если мы хотим разместить несколько сайтов? Допустим, что у нас есть несколько приобретенных доменных имен. Например:
- school.ru
- moodle.school.ru
- школа.рф
- support.org
и один «белый» ip-адрес. Что нужно делать?
В Apache2 такая возможность, конечно-же, предусмотрена.
Но тут нужно понимать, как работает механизм обработки запросов к серверу. Представить это можно так:
а) В соответствии со схемой, нам нужно настроить на DNS-записи на DNS-сервере.
б) Настроить Веб-сервер для работы с несколькими виртуальными хостами.
Допустим, что с первым пунктом мы разобрались, приступаем к следующему этапу:
1. Устанавливаем веб-сервер, если он еще не установлен:
2. Для того, чтобы обезопасить работу на сервере, в директориях, которые будут созданы для размещения сайтов передадим права на директории пользователю (у меня это webuser, под которым будем работать с файлами сайта). Для этого установим модуль apache2-mpm-itk:
apt-get install apache2-mpm-itk
3. Создаем директорию для нашего сайта в /var/www/ и передаем права на нее нашему пользователю webuser :
mkdir /var/www/school.ru
chown webuser:webuser /var/www/school.ru
4. Создаем файл конфигурации виртуального хоста для school.ru:
touch /etc/apache2/sites-available/school.ru.conf
И прописываем в нем:
<VirtualHost *:80>
ServerName school.ru
ServerAdmin [email protected]
ServerAlias www.school.ru
DocumentRoot /var/www/school.ru
CustomLog ${APACHE_LOG_DIR}/school.ru.access.log combined
ErrorLog ${APACHE_LOG_DIR}/school.ru.error.log
AssignUserID webuser webuser
<Directory /var/www/school.ru>
Options -Includes -Indexes -ExecCGI
</Directory>
</VirtualHost>
Сохраняем изменения.
5. «Включаем» сайт. Это можно сделать путем создания символьной ссылки на конфигурационный файл виртуального хоста school.ru.conf в директорию /etc/apache2/sites-enabled, либо специальной утилитой apache2:
«Выключить» сайт можно командой:
6. Перезапускаем apache2:
7. Для того, чтобы проверить работу виртуального хоста school.ru создадим в директории /var/www/school.ru файл index.html c содержимым:
<body><h2>Hello!</h2></body>
touch /var/www/school.ru/index.html
8. Запускаем браузер и переходим по адресу http://school.ru
Источники:
Интересная статья? Поделитесь ей с друзьями!
Похожие записи:
Подключение модуля mpm-itk к серверу Apache под Debian 9
После установки модуля Apache libapache2-mpm-itk на сервер под ОС Debian 9, модуль находится на диске сервера, но для его работы, его нужно подключить к Апачу. Данный модуль служит для того, чтобы запускать процессы Apache с правами того пользователя, который является владельцем файлов сайта (по сути, владельцем сайта). О том, как это включить этот модуль и как проверить то, что модуль действительно подключился, рассмотрим в этой статье.
Исходная картина настроек Apache с отключенным модулем mpm-itk
Для того, чтобы судить об изменениях в системе, нужно разобраться с её изначальными настройками. Поэтому посмотрим на версию установленного Apache для того, чтобы потом сравнить её с той, которая станет после включения модуля mpm-itk. Итак, имеем:
root@server:~# apachectl -V
Server version: Apache/2.4.25 (Debian)
Server built: 2019-04-02T19:05:13
Server's Module Magic Number: 20120211:68
Server loaded: APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: event
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
Как я уже обращал внимание в статье про установку Apache, его исходной конфигурацией MPM является event
. Это видно по строке Server MPM: event
в листинге выше.
Подключение модуля mpm-itk к серверу Apache под Debian 9
После установки модуля mpm-itk ничего не меняется, значит включим этот модуль вручную:
root@sever:~# a2enmod mpm_itk
Considering dependency mpm_prefork for mpm_itk:
Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Module mpm_prefork already enabled
Module mpm_itk already enabled
Как видно, при акцивации модуля mpm-itk вышел конфликт с mpm_event
и mpm_worker
и была подключена конфигурация MPM mpm_prefork for mpm_itk
.
Перезагрузим Апач:
root@server:~# apachectl restart
Новая конфигурация Apache с включенным модулем mpm-itk
Убедимся в том, что при подключении модуля mpm-itk произошла смена конфигурация MPM с event
на prefork
:
root@server:~# apachectl -V
Server version: Apache/2.4.25 (Debian)
Server built: 2019-04-02T19:05:13
Server's Module Magic Number: 20120211:68
Server loaded: APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
Резюме
Таким образом происходит подключение модуля mpm-itk к серверу Apache под Debian 9 со всеми вытекающими последствиями и автоматической сменой конфигурации MPM этого WEB-сервера.
Отследить, что Apache запускается теперь под пользователем www-data
, можно посмотрев на список запущенных процессов с помощью команды top
. После настройки виртуальных хостов, надо будет ещё раз проверить, соответствует ли имя пользователя, под которым запущен процесс с пользователем, прописанным в конфиге виртуального хоста.
Заберите ссылку на статью к себе, чтобы потом легко её найти 😉
Выберите, то, чем пользуетесь чаще всего:
Спасибо за внимание, оставайтесь на связи! Ниже ссылка на форум и обсуждение ; )
MPM — worker, prefork или event?
MPM — Multi-Processing Module, можно перевести как «Модуль мультипроцессовой обработки» (не путайте с мультипроцессорной!).
Если быть совсем кратким — MPM используется сервером Apache для обработки нескольких запросов несколькими процессами одновременно.
В настоящее время используется 2 основных варианта MPM — это Worker и PreFork. Также, имеется сравнительно новый модуль — Event, который только недавно перешел из стадии ‘experimental‘ в ‘stable‘.
В этой статье постараемся разобраться — в чем разница между этими тремя MPM- Worker, PreFork и Event.
Итак, начнем с модуля PreFork — на данный момент он является наиболее распространенным модулем, и по умолчанию Apache устанавливается именно с ним.
Apache MPM PreFork запускает по отдельному процессу на каждый запрос. Иначе говоря, каждый процесс одновременно обрабатывает только 1 поток (thread) на одно соединение. Т.к. PreFork заранее создает определенное количество процессов, которые не требуют времени на отдельный вызов при поступлении запроса к серверу и не нуждаются в выполнении маршалинга (в технологии ORPC — процесс упаковки запроса, включая параметры, в стандартный формат, пригодный для передачи по сети) во время его обработки, то такой вариант является наиболее быстродействующим, по сравнению с другими MPM. Однако, такой прирост производительности имеется только в случае, когда одновременно поступает некоторое ограниченное количество одновременных запросов, т.к. каждый из них должен ждать, пока процессор сможет их обработать. Кроме того, попытки увеличить количество одновременно запускаемых процессов способно серьезно повлиять на используемую сервером память.
Одним из важнейших преимуществ такого MPM является его большая безопасность, в силу того, что каждый процесс фактически изолирован от других. Его использование оправдано в тех случаях, когда используются модули, которые не поддерживают или плохо поддерживают, например — mod_php.
Apache MPM worker — использует многопоточную систему обработки запросов, что улучшает обработку большого количества соединений. MPM Worker запускает несколько процессов, которые, в свою очередь, запускают несколько потоков (threads). Эти «дочерние потоки», по аналогии с процессами MPM PreFork, ожидают входящих клиентских запросов. Такой подход является менее ресурсоёмким в плане потребления оперативной памяти сервера, в отличии от процессов PreFork. Так же, улучшается обработка большого количества одновременных запросов, т.к. в отличии от PreFork запросу необходимо только получить свободный поток, который как правило есть, что позволяет сэкономить ресурсы сервера.
К недостаткам MPM Worker относится его относительная нестабильность, по сравнению с PreFork, т.к. проблемы в одном процессе могут затронуть другие соединения.Кроме того, имейте ввиду, что Worker связывает каждое keep-alive соединение с потоком, а не с запросом, и в таком случае каждый поток может выполнятся значительное время, пока соединение не будет окончательно разорвано.
И последний — Apache MPM Event. По принципу работы он очень похож на MPM Worker. Главное отличие Event от Worker в том, что он поддерживает выделенный поток для каждого установленного соединения, и передает дочерним потокам запрос только после того, как он был непосредственно сделан. И сразу же после обработки этого запроса — поток освобождается для выполнения следующего запроса. Такой вариант отлично подходит для клиентов, которые делают не частые запросы, но поддерживают долгие keep-alive соединения с сервером.
Исключением является обработка SSL-соединений, в таких случаях Event
ведет себя аналогично Worker-у.
Что касается сравнения работы Worker и PreFork — то можно увидеть сравнения например тут>>>. Как видно, разница между ними всего несколько процентов, однако — все зависит от специфики каждого сервера и обрабатываемых им запросов.
Кроме того, многие из сравнительно старых модулей Apache требуют наличия именно MPM PreFork, что следует учитывать при выборе Multi-Processing Module для вашего сервера.
Так же, существуют ещё несколько вариантов MPM — mpm-itk, mpm-peruser и другие>>>.
Напоследок — несколько полезных команд.
Узнать, какой тип MPM используется в установленном Apache можно любой из команд:
# apachectl -t -D DUMP_MODULES | grep mpm
mpm_prefork_module (static)
или
# httpd -V | grep mpm
-D APACHE_MPM_DIR=»server/mpm/prefork»
Установить Apache с выбранным MPM можно из соответствующего порта:
/usr/ports/www # ls | grep apache
…
apache22
apache22-event-mpm
apache22-itk-mpm
apache22-peruser-mpm
apache22-worker-mpm
…
Порт apache22 — установит Apache с mpm_prefork.
Ссылки по теме.
http://httpd.apache.org
http://serverfault.com
http://www.hostcms.ru
http://phpsuxx.blogspot.com
http://www.salex.ru
http://algolist.manual.ru
Установка модулей Apache — ИТ Проффи
Веб-серевер Apache является универсальным решением для обслуживания HTTP-запросов и обработки веб-контента. Практически для всех дистрибутивов Linux он поставляется готовым не просто для базового использования, но и позволяет организовать полноценный хостинг как минимум для ведения разработки веб-приложений. Однако, Apache всегда отличался тем, что для наиболее полного раскрытия его возможностей и потенциала он требует довольно щепетильного конфигурирования и оптимизации. Это является одновременно и недостатком и плюсом. Поскольку только таким образом можно добиться от Apache максимальной эффективности для любой специфики задач. По этой же причине (сложность настройки и оптимизации) был разработан высокопроизводительный «из коробки» веб-сервер NGINX. Ещё одним плюсом Apache является поддержка подключаемых модулей. Что делает его легко масштабируемым и позволяет адаптировать под различные задачи. Самих же модулей Apache существует огромное количество. А свободная архитектура и подробная документация позволяют разрабатывать свои собственные модули.
Зачем нужны модули Apache
Разработчики Apache вряд ли могут предусмотреть все потребности, возникающие в процессе развития веб-технологий. В такой ситуации рационально осуществлять поддержку расширения функционала с помощью отдельных подключаемых программных компонентов — модулей. Каждый модуль добавляет к базовому или текущему функционалу веб-сервера новые возможности. Таким образом, модули Apache позволяют легко оснащать его необходимыми возможностями. В то же время, если отпадает необходимость в использовании какого-либо модуля — его легко отключить. Экономя на потребляемых ресурсах.
Такой подход удобен также и тем, что модули можно (и легко) разрабатывать отдельно. Без затрагивания основного кода ядра Apache.
Как работает механизм подключения модулей?
Модули Apache представляют собой программное обеспечение (ПО) в виде динамически подключаемых библиотек — файлов с расширением *.so. Хранятся эти модули (т. е. библиотеки *.so) обычно там же, где и все библиотеки систем Linux – в каталоге /usr/lib. В котором конкретно для модулей Apache предусмотрен подкаталог apache/modules.
Установка же модуля подразумевает подключение файла библиотеки (модуль *.so) к конфигурации Apache. Чтобы он мог использовать функции, реализованные и содержащиеся в файле модуля. Подключение происходит при помощи специальных инструкций в виде директив конфигурации. Эти инструкции содержатся в конфигурационных файлах *.load и *.conf. Которые подключают модуль и определяют конфигурацию его работы соответственно.
Чтобы Apache «знал», что нужно подключить модуль, его конфигурационные файлы (модуля) должны быть в специальном каталоге /etc/apache2/mods-available
. А для того, чтобы Apache «знал», как именно подключить модуль. В специальном каталоге /etc/apache2/mods-enabled
должны существовать символические ссылки на соответствующие конфигурационные файлы из каталога /etc/apache2/mods-available
. Наличие такой ссылки и позволяет Apache подключать дополнительные функции библиотек «из вне». При условии, что они совместимы и корректно задана конфигурация подключения.
Подобная схема подключения по принципу раздельного хранения файлов библиотек модулей, их конфигурационных файлов и связывания их символическими ссылками позволяет легко ориентироваться в конфигурации и управлять ей. Фактически подключение модулей осуществляется на уровне файловой системы (ФС). Которая представляет собой унифицированный интерфейс для этого.
Включение и отключение модулей
Подавляющее большинство модулей Apache поставляются в стандартных репозиториях практически любого дистрибутива Linux. Для их установки и подключения нужно просто воспользоваться системой управления пакетами (СУП) дистрибутива. Например, в Ubuntu для установки модуля FastCGI следует выполнить следующую команду:
$ sudo apt install libapache2-mod-fcgid
Сами модули нетрудно отыскать в репозиториях по ключевым словам, например для СУП APT в Ubuntu это выглядит так:
apt-cache search fcgi apache2-utils - Apache HTTP Server (utility programs for web servers) libcgi-fast-perl - CGI subclass for work with FCGI libfcgi-perl - helper module for FastCGI python-paste - tools for using a Web Server Gateway Interface stack - Python 2.x python-paste-doc - tools for using a Web Server Gateway Interface stack - documentation python3-paste - tools for using a Web Server Gateway Interface stack - Python 3.x chiark-utils-bin - chiark system administration utilities fcgiwrap - simple server to run CGI applications over FastCGI libanyevent-fcgi-perl - Perl non-blocking FastCGI server libapache2-mod-fcgid - FastCGI interface module for Apache 2 libapache2-mod-fcgid-dbg - debugging symbols for mod_fcgid
В данном выводе пакет libapache2-mod-fcgid, как следует из его описания, и является искомым вариантом. После установки модуля нужно перезапустить Apache.
Но когда использование СУП или менеджера пакетов для установки не представляется возможным, например, когда разрабатывается собственный модуль, то необходимо выполнить вручную порядок действий, соответствующий механизму подключения, описанному в предыдущей главе:
- скопировать файл библиотеки модуля в /usr/lib/apache/modules;
- создать конфигурационный файл module_name.load в каталоге /etc/apache2/mods-available;
- в каталоге /etc/apache2/mods-enabled создать символическую ссылку на файл module_name.load из каталога /etc/apache2/mods-available;
- перезапустить веб-сервер Apache, либо перезагрузить его конфигурацию.
Содержимое файла конфигурации module_name.load (имя задано условно) представляет собой, как уже было отмечено, определение директивы загрузки функций из файла библиотеки модуля (условно name_module.so) по соответствующему пути:
LoadModule name_module /usr/lib/apache/modules/name_module.so
Во время запуска (или перезагрузки конфигурации) Apache «просматривает» каталог /etc/apache2/mods-enabled
, и по имеющимся в нём символическим ссылкам читает соответствующие файлы конфигурации из каталога /etc/apache2/mods-available
. Содержащаяся в них директива LoadModule указывает Apache загрузить соответствующий модуль в свое адресное пространство.
Очевидно, что для отключения модулей нужно просто удалить соответствующую символическую ссылку в каталоге mods-enabled, а также перезапустить веб-сервер.
В некоторых дистрибутивах для удобства управления модулями и вообще конфигурацией Apache предоставляются утилиты, например из пакета apache2-utils. Этот пакет предоставляет команды, позволяющие быстро подключать и отключать модули: a2enmod и a2dismod соответственно. Например:
$ sudo a2enmodule mpm_itk
Эта команда включит модуль mpm-itk. При этом библиотека модуля и соответствующий конфигурационный файл mpm_itk.load уже должны присутствовать в системе.
В заключение необходимо отметить, что на примере установки дополнительных модулей Apache видно, что этот процесс далеко не самый быстрый и простой. Однако все действия абсолютно логичны, а потому легко усваиваются, избавляя от необходимости что-то запоминать или часто обращаться к справочным руководствам.запоминать или часто
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Модуль Apache: MPM ITK | Документация cPanel и WHM
Модуль Apache: MPM ITK
Последнее изменение: 16 апреля 2020 г.
Обзор
Модуль mod_mpm_itk
Apache заставляет процесс Apache переключаться на идентификатор пользователя (UID) и идентификатор группы (GID) владельца домена, прежде чем он ответит на запрос.Это позволяет каждому пользователю изолировать свои файлы от других со стандартными настройками разрешений для файлов.
Примечание:
Чтобы запросить все значения SETUID
и SETGID
на сервере, выполните следующую команду:
find / -type f \ (-perm -04000 -o -perm -02000 \) \ -exec ls -lg {} \;
Использование
Только используйте этот модуль, если вы запускаете модули, которые не , а требуют кода с поддержкой потоков.
Требования
Для этого модуля требуются EasyApache 4, Apache 2.4, MPM Prefork и обработчик CGI PHP.
Предупреждение:
Мы, , настоятельно рекомендуем , чтобы вы только устанавливали модуль Apache mod_mpm_itk
в системе, в которой работает CentOS 7 с включенным в ядре режимом безопасных вычислений (seccomp v2). Модуль mod_mpm_itk
Apache будет работать на CentOS 6, но , а не , будет таким же безопасным.
Совместимость
Модуль MPM ITK не совместим со следующими функциями :
- мод_http2
- mod_ruid2
- mod_userdir
- EA ускоритель
- Мод suPHP
- Функция выбора PHP CloudLinux ™
- Интерфейс Leech Protection cPanel ( cPanel >> Главная >> Безопасность >> Leech Protection )
Примечание:
Если вы выберете опцию MPM ITK , мы настоятельно рекомендуем удалить функцию защиты от кражи из списков функций ваших пользователей.Используйте интерфейс WHM Feature Manager ( WHM >> Home >> Packages >> Feature Manager ) для изменения списков функций ваших пользователей.
ограничения setuid () и setgid ()
Модуль MPM ITK Apache реализует ограничения на использование функции setuid ()
и функции setgid ()
. В результате скрипты, зависящие от этих функций, могут столкнуться с проблемами. Сюда входят сценарии, которые используют функцию mail ()
, функцию shell_exec
или команду sudo
.
Вы можете снять эти ограничения одним из следующих способов:
- Не используйте модуль MPM ITK Apache.
- Обновите сценарий, чтобы больше не требовать повышенных привилегий.
- Отключите безопасность и разрешите пользователям выполнять сценарии от имени пользователя root
. Вы можете разрешить пользователям с UID или GID от
0
до4294496296
обходить защиту, если вы добавите следующий код в свой/etc/apache2/conf.d/includes/pre_virtualhost_global.conf
файл:1 2 3 4
LimitUIDRange 0 4294496296 LimitGIDRange 0 4294496296
Предупреждение:
Мы, , настоятельно рекомендуем сделать , а не , включить root
привилегии для ваших пользователей. Это действие имеет серьезные последствия для безопасности и может поставить под угрозу ваш сервер.
Как установить или удалить модуль
Примечание:
Профиль cPanel Default + MPM ITK EasyApache 4 по умолчанию содержит модуль Apache mod_mpm_itk
.
В интерфейсе
Самый простой способ установить или удалить модуль Apache mod_mpm_itk
- использовать интерфейс WHM EasyApache 4 ( WHM >> Главная >> Программное обеспечение >> EasyApache 4 ).
В командной строке
Установить модуль
Вы, , должны вручную удалить MPM Worker и установить MPM Prefork, чтобы модуль MPM ITK работал правильно. Вы должны выполнить следующие шаги в командной строке , прежде чем вы установите модуль MPM ITK:
| |
Чтобы установить модуль Apache mod_mpm_itk
, выполните в командной строке следующую команду:
yum install ea-apache24-mod_mpm_itk
Удалить модуль
Чтобы удалить модуль Apache mod_mpm_itk
, выполните в командной строке следующую команду:
yum удалить ea-apache24-mod_mpm_itk
После удаления модуля MPM ITK, если вы хотите использовать MPM Worker, вы должны выполнить следующие шаги в командной строке:
| |
.
Паоло - Apache2 MPM ITK на debian 9
Это безопасное решение для наличия веб-сервера для многих сайтов. С его помощью вы можете указать, какой пользователь сервера будет использоваться для какого сайта, чтобы apache выполнял код (в основном php) с этим пользователем, предотвращая доступ файловой системы к плохому коду.
При новой установке Debian 9 (с установленным только SSH-сервером) давайте:
apt-get установить libapache2-mpm-itk libapache2-mod-php7.0
Теперь включим те модули, которые могут быть полезны, и один необходимый:
a2enmod mpm_itk a2enmod переписать
Теперь настроим виртуальный хост:
cd / etc / apache2 / sites-available коснитесь my_website.conf нано my_website.conf
и поместите это в файл (очевидно, вы можете изменить настройки по своему усмотрению):
Имя сервера my_website ServerAdmin paolo @ my_website DocumentRoot / home / www / my_website / home / AssignUserId my_username my_usergroup <Каталог / главная / www / my_website / home /> Индексы опций FollowSymLinks AllowOverride All Требовать все предоставлено
Давайте активируем my_website:
a2ensite my_website
На этом этапе нам нужно создать пользователя и группу, которую мы указываем в файле:
useradd -d / home / www / my_website -s / usr / sbin / nologin имя_пользователя
и папки по пути:
mkdir / главная / www mkdir / главная / www / my_website mkdir / home / www / my_website / home cd / home / www / my_website chown -R my_username: my_username home /
На данный момент у нас есть виртуальный хост, указывающий на путь к папке, в которой apache будет запускать сценарии от имени пользователя my_username.
Поэтому можно настроить mysql или любую другую службу, чтобы сделать этот веб-сервер богаче функциями.
.