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 по умолчанию.