## Apache 2.x на Unix системах

Раздел описывает установку PHP c веб-сервером Apache 2.x на Unix-системах.

Внимание

Разработчики PHP не рекомендуют использовать многопоточный MPM-модуль в производственной среде, в которой работает Apache 2. Лучше предпочесть prefork-версию модуля MPM, которая в Apache 2.0 и 2.2 идёт по умолчанию. Подробнее о причинах рассказывает ответ раздела FAQ о работе Apache2 с многопоточным MPM-модулем

Наиболее авторитетный источник информации по Apache 2.x — » документация к Apache. Документация даёт подробную информацию о настройках при установке.

Последняя версия веб-сервера Apache HTTP Server доступна для загрузки » на странице загрузки Apache, а совместимая версия PHP — на странице Download на этом сайте. Это краткое руководство описывает только базовую установку Apache 2.x и PHP. Дополнительную информацию даёт » документация к Apache. В инструкции ниже опустили номера версий — замените 'NN' на номер, который соответствует версии Apache.

Сайт веб-сервера предлагает для загрузки две версии Apache 2.x — 2.4 и 2.2. Лучше предпочесть последнюю версию — 2.4, если нет причин для установки версии 2.2. Инструкции этого раздела будут работать как для версии 2.4, так и для версии 2.2. Обратите внимание, что поддержку Apache httpd 2.2 официально прекратили, поэтому разработку этой версии остановили и больше не выпускают исправлений.

1. Скачайте Apache HTTP Server по приведённой ссылке и распакуйте его:

       tar -xzf httpd-2.x.NN.tar.gz

2. Аналогичным способом скачайте и распакуйте исходные коды PHP:

       tar -xzf php-NN.tar.gz

3. Скомпилируйте и установите Apache. Подробнее об установке рассказывает документация к Apache.

       cd httpd-2_x_NN
       ./configure --enable-so
       make
       make install

4. Теперь Apache 2.x.NN доступен по адресу /usr/local/apache2, установщик настроил веб-сервер на поддержку загружаемых модулей и работу через стандартный мультипроцессный MPM-модуль, который отвечает на запросы по модели prefork: обрабатывает запросы в отдельном потоке однопоточных процессов. Правильно ли прошла установка, проверяют через стандартную процедуру запуска Apache — командой наподобие вот такой:

       /usr/local/apache2/bin/apachectl start

   Затем остановите сервер, чтобы сконфигурировать и установить PHP:

       /usr/local/apache2/bin/apachectl stop

5. Теперь сконфигурируем и соберём PHP. На этом этапе PHP настраивают через опции конфигурации, чтобы указать, например, какие модули требуется включить. Запустите команду ./configure --help, чтобы получить список доступных параметров конфигурации. В примере мы выполним простую настройку с поддержкой веб-сервера Apache и БД MySQL.

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

       cd ../php-NN
       ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
       make
       make install

   Если потребуется изменить параметры конфигурации после установки, то потребуется повторно выполнить шаги configure, make и make install. Просто перезапустите Apache, чтобы изменения вступили в силу и новый модуль начал работать. Перекомпиляция Apache для этого не требуется.

   Обратите внимание: если не указали иное, команда make install установит также пакетный менеджер » PEAR, инструменты PHP наподобие phpize, установит CLI-интерфейс для работы с PHP в командной оболочке и другие компоненты.

6. Настройте файл php.ini.

       cp php.ini-development /usr/local/lib/php.ini

   Установка параметров PHP доступна через редактирование файла `.ini`. Укажите параметр `--with-config-file-path=/some/path` в шаге 5, если предпочитаете хранить файл php.ini в другом месте.

   Если вместо этого вы выберете файл php.ini-production, прочитайте список изменений внутри, поскольку они влияют на поведение PHP.

7. Отредактируйте файл httpd.conf, чтобы Apache загружал модуль PHP. Путь к PHP-модулю указывают справа от инструкции `LoadModule`. Команда make install, возможно, уже добавила эту инструкцию автоматически, ну лучше проверить.

   Для PHP 8:

       LoadModule php_module modules/libphp.so

   Для PHP 7:

       LoadModule php7_module modules/libphp7.so

8. Скажите веб-серверу Apache, чтобы он разбирал файлы с конкретными расширениями как PHP-код. Например, пусть Apache разбирает как PHP-код файлы с расширением `.php`. Вместо установки только Apache-директивы `AddType` избегают исполнения опасных загрузок и файлов наподобие exploit.php.jpg. Аналогично следующему примеру указывают одно или больше произвольных расширений, которые веб-сервер будет разбирать как файлы с PHP-кодом. Для демонстрации добавим расширение `.php`.

       <FilesMatch \.php$>
           SetHandler application/x-httpd-php
       </FilesMatch>

   Или, когда требуется разрешить запуск PHP-кода из файлов с расширениями `.php`, `.php2`, `.php3`, `.php4`, `.php5`, `.php6` и `.phtml`, но не другими, настройка выглядит вот так:

       <FilesMatch "\.ph(p[2-6]?|tml)$">
           SetHandler application/x-httpd-php
       </FilesMatch>

   А чтобы фильтр исходного PHP-кода обрабатывал файлы с расширением `.phps` и показывал как исходный код с подсветкой синтаксиса, настройку записывают вот так:

       <FilesMatch "\.phps$">
           SetHandler application/x-httpd-php-source
       </FilesMatch>

   Модуль `mod_rewrite` умеет показывать произвольные файлы с расширением `.php` как исходный код с подсветкой синтаксиса без переименования или копирования в файл с расширением `.phps`:

       RewriteEngine On
       RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]

   Фильтр исходного PHP-кода отключают в производственной среде, поскольку он раскрывает конфиденциальную или другую чувствительную информацию, которую встроили в исходный код.

9. Сервер Apache запускают стандартной процедурой наподобие:

       /usr/local/apache2/bin/apachectl start

   ИЛИ

       service httpd restart

Выполнение действий, которые описала эта страница, запускает веб-сервер Apache2 с поддержкой PHP в виде `SAPI`-модуля. Конечно, для PHP и Apache доступно гораздо больше параметров конфигурации. Дополнительную информацию даёт команда ./configure --help при запуске в соответствующем дереве исходного кода.

Сборка веб-сервера Apache будет работать в многопоточном режиме, если при сборке Apache вместо стандартного мультипроцессного MPM-модуля prefork выбрать мультипроцессный MPM-модуль, который отвечает на запросы по модели worker: обрабатывает отдельный запрос в отдельном потоке многопоточного процесса. Чтобы сделать это, к аргументу, который передали команде ./configure на шаге 3, добавляют следующую опцию:

    --with-mpm=worker

Веб-сервер собирают для работы по такой модели, только если осознают последствия решения и отчётливо понимают смысл действий. Документация Apache » к MPM-модулям рассматривает работу модулей MPM подробнее.

> Замечание:

> В разделе FAQ в ответе на вопрос о параметре MultiViews в настройках Apache обсуждается согласование контента множественного представления при работе веб-сервера с PHP-файлами.

> Замечание:

> Только в системах с поддержкой потоков получится собрать многопоточную версию Apache. Тогда требуется и PHP-сборка с поддержкой потокобезопасного ZTS-режима (англ. Zend Thread Safety). В этой конфигурации не каждое расширение будет доступно. Разработчики PHP рекомендуют настраивать сборку Apache на работу с MPM-модулем prefork по умолчанию.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open