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 официально прекратили,
поэтому разработку этой версии остановили и больше не выпускают исправлений.
-
Скачайте Apache HTTP Server по приведённой ссылке
и распакуйте его:
-
Аналогичным способом скачайте и распакуйте исходные коды PHP:
-
Скомпилируйте и установите Apache. Подробнее об установке
рассказывает документация к Apache.
-
Теперь Apache 2.x.NN доступен по адресу /usr/local/apache2,
установщик настроил веб-сервер на поддержку загружаемых модулей и работу через
стандартный мультипроцессный MPM-модуль, который отвечает на запросы по модели prefork:
обрабатывает запросы в отдельном потоке однопоточных процессов.
Правильно ли прошла установка, проверяют через стандартную
процедуру запуска Apache — командой наподобие вот такой:
Затем остановите сервер, чтобы сконфигурировать и установить PHP:
-
Теперь сконфигурируем и соберём PHP. На этом этапе PHP настраивают
через опции конфигурации, чтобы указать, например, какие модули требуется включить.
Запустите команду ./configure --help, чтобы получить список доступных параметров
конфигурации. В примере мы выполним простую настройку
с поддержкой веб-сервера Apache и БД MySQL.
При сборке Apache из исходного кода по приведённой на этой странице инструкции
путь к команде apxs будет соответствовать пути в следующем примере,
но если Apache установили другим способом, потребуется изменить пример и указать путь к apxs,
который соответствует установке. Обратите внимание, что отдельные дистрибутивы
переименовывают apxs в apxs2.
Если потребуется изменить параметры конфигурации после установки,
то потребуется повторно выполнить шаги configure, make
и make install.
Просто перезапустите Apache, чтобы изменения вступили в силу и новый модуль начал работать.
Перекомпиляция Apache для этого не требуется.
Обратите внимание: если не указали иное, команда make install
установит также пакетный менеджер » PEAR,
инструменты PHP наподобие phpize,
установит CLI-интерфейс для работы с PHP в командной оболочке и другие компоненты.
-
Настройте файл php.ini.
Установка параметров PHP доступна через редактирование файла .ini.
Укажите параметр --with-config-file-path=/some/path в шаге 5,
если предпочитаете хранить файл php.ini в другом месте.
Если вместо этого вы выберете файл php.ini-production,
прочитайте список изменений внутри, поскольку они влияют на поведение PHP.
-
Отредактируйте файл httpd.conf,
чтобы Apache загружал модуль PHP.
Путь к PHP-модулю указывают справа от инструкции LoadModule.
Команда make install, возможно, уже добавила эту инструкцию автоматически,
ну лучше проверить.
-
Скажите веб-серверу Apache, чтобы он разбирал файлы с конкретными расширениями как PHP-код.
Например, пусть Apache разбирает как PHP-код файлы с расширением .php.
Вместо установки только Apache-директивы
AddType избегают исполнения опасных загрузок и файлов
наподобие exploit.php.jpg.
Аналогично следующему примеру указывают одно или больше произвольных расширений,
которые веб-сервер будет разбирать как файлы с PHP-кодом.
Для демонстрации добавим расширение .php.
Или, когда требуется разрешить запуск PHP-кода из файлов
с расширениями .php, .php2,
.php3, .php4, .php5,
.php6 и .phtml, но не другими,
настройка выглядит вот так:
А чтобы фильтр исходного PHP-кода обрабатывал файлы с расширением .phps
и показывал как исходный код с подсветкой синтаксиса,
настройку записывают вот так:
Чтобы разрешить использование PHP-файла как обработчика по умолчанию, если ни один другой обработчик не найден,
например при использовании механизма маршрутизации, можно применить директиву FallbackResource.
Доступно в Apache 2.4.4 и выше.
Поскольку директива SetHandler применяется независимо от того, существует ли файл, а
FallbackResource применяется только если обработчик ещё не задан,
может потребоваться использовать директиву If, чтобы обработчик применялся только для существующих файлов.
Это позволяет FallbackResource обрабатывать пути, заканчивающиеся на .php,
но не существующие, что удобно для обработки ошибок и маршрутизации.
Модуль mod_rewrite умеет показывать произвольные файлы
с расширением .php как исходный код с подсветкой синтаксиса
без переименования или копирования в файл с расширением .phps:
Фильтр исходного PHP-кода отключают
в производственной среде, поскольку он раскрывает конфиденциальную
или другую чувствительную информацию, которую встроили в исходный код.
-
Сервер Apache запускают стандартной процедурой наподобие:
ИЛИ
Выполнение действий, которые описала эта страница, запускает веб-сервер Apache2
с поддержкой PHP в виде SAPI-модуля.
Конечно, для PHP и Apache доступно гораздо больше параметров конфигурации.
Дополнительную информацию даёт команда ./configure --help
при запуске в соответствующем дереве исходного кода.
Сборка веб-сервера Apache будет работать в многопоточном режиме,
если при сборке Apache вместо стандартного мультипроцессного MPM-модуля prefork
выбрать мультипроцессный MPM-модуль, который отвечает на запросы
по модели worker: обрабатывает отдельный запрос в отдельном потоке
многопоточного процесса. Чтобы сделать это, к аргументу, который передали команде ./configure
на шаге 3, добавляют следующую опцию:
Веб-сервер собирают для работы по такой модели, только если осознают
последствия решения и отчётливо понимают смысл действий. Документация Apache
» к MPM-модулям
рассматривает работу модулей MPM подробнее.
Замечание:
В разделе FAQ в ответе на вопрос
о параметре MultiViews в настройках Apache
обсуждается согласование контента множественного представления при работе веб-сервера с PHP-файлами.
Замечание:
Только в системах с поддержкой потоков получится собрать многопоточную версию Apache.
Тогда требуется и PHP-сборка с поддержкой потокобезопасного ZTS-режима (англ. Zend Thread Safety).
В этой конфигурации не каждое расширение будет доступно.
Разработчики PHP рекомендуют настраивать сборку Apache
на работу с MPM-модулем prefork по умолчанию.