MAATRIX / Блог / Как установить и настроить Apache с mod_php на VPS

Как установить и настроить Apache с mod_php на VPS

Как установить и настроить Apache с mod_php на VPS

MAATRIX

Многие PHP-проекты и старые CMS рассчитаны именно на Apache с его .htaccess и модульной обработкой PHP. Установить Apache с mod_php на VPS — самый прямой путь запустить такой сайт: PHP работает внутри процесса веб-сервера, а правила переопределяются прямо в папках без правки основного конфига. Разберём установку по шагам и честно обсудим, когда mod_php стоит заменить на PHP-FPM.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое mod_php и когда он уместен

mod_php — это модуль, встраивающий интерпретатор PHP прямо в процесс Apache. Когда приходит запрос к PHP-скрипту, его обрабатывает сам веб-сервер, без обращения к внешнему процессу. Исторически это самый простой способ запустить PHP: поставил модуль — и всё работает, никакой отдельной службы настраивать не нужно.

Главное удобство Apache — файлы .htaccess. Они позволяют переопределять правила веб-сервера прямо в каталоге сайта: редиректы, правила доступа, красивые URL. Множество готовых CMS и скриптов поставляются с готовым .htaccess, и на Apache они заводятся без переписывания конфигов. Для наследуемых проектов и хостинга, где важна совместимость, это решающий аргумент.

Честно о минусе. mod_php с классическим рабочим модулем prefork тратит много памяти: каждый процесс Apache несёт в себе полный интерпретатор PHP, даже когда отдаёт обычную картинку. Под высокой нагрузкой это неэффективно, и здесь выигрывает связка Apache с PHP-FPM через быстрый обработчик. Поэтому mod_php хорош для простоты и совместимости, а для нагруженных проектов ниже мы покажем и вариант с FPM.

Полезно понимать, где mod_php уместнее всего. Это небольшие и средние сайты, панели и внутренние сервисы, где важнее предсказуемость и совместимость со старым кодом, чем выжимание максимума производительности. Многие тиражные скрипты десятилетиями писались в расчёте именно на Apache с модульным PHP, и на нём они просто работают. Если же вы разворачиваете высоконагруженный портал с тысячами одновременных посетителей, лучше сразу планировать связку с PHP-FPM. Хорошая новость в том, что перейти с одной схемы на другую можно в любой момент без переустановки сервера — конфигурация Apache позволяет сменить обработчик PHP несколькими командами, и мы разберём это в конце.

Подготовка VPS и установка Apache

Для типового сайта на PHP достаточно VPS с 2 ядрами и 2–4 ГБ RAM; из-за прожорливости prefork памяти лучше заложить с запасом. Начните с обновления и установки Apache:

apt update && apt upgrade -y
apt install apache2 -y
systemctl enable --now apache2

Проверьте, что сервер поднялся и отвечает:

systemctl status apache2
curl -I http://127.0.0.1

Откройте нужные порты в фаерволе, оставив снаружи только веб и SSH:

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Локацию сервера выбирайте по аудитории сайта: для российских посетителей ниже пинг с RU-площадки, для зарубежного проекта — US или UK. У MAATRIX доступны все три локации с оплатой из России картой, СБП или криптой, поэтому запустить сайт можно без иностранных платёжных средств.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Установка mod_php и проверка PHP

Теперь поставим сам PHP вместе с модулем для Apache. В свежих Ubuntu ставится актуальная версия, например PHP 8.3, и модуль подключается автоматически:

apt install php libapache2-mod-php php-mysql php-curl php-xml php-mbstring -y
systemctl restart apache2

Пакет libapache2-mod-php — это и есть mod_php: при его установке Apache автоматически подключает модуль и начинает обрабатывать PHP внутри своих процессов. Остальные пакеты — это расширения PHP под типовые задачи: php-mysql для работы с базой MySQL или MariaDB, php-curl для запросов к внешним API, php-xml и php-mbstring для разбора данных и корректной работы с многобайтовыми строками, включая кириллицу. Набор расширений подбирают под конкретную CMS: большинство популярных движков в документации перечисляют, что им нужно. Недостающее расширение — частая причина, по которой сайт устанавливается наполовину и выдаёт непонятную ошибку, поэтому проще поставить типовой набор сразу.

После перезапуска Apache уже умеет обрабатывать PHP. Проверим это тестовым файлом в корне сайта:

echo "<?php phpinfo();" > /var/www/html/info.php

Откройте http://IP/info.php в браузере — если видите таблицу phpinfo, PHP работает. В строке Server API там будет указано Apache 2.0 Handler, что подтверждает работу именно через mod_php. После проверки обязательно удалите этот файл, потому что phpinfo раскрывает конфигурацию сервера:

rm /var/www/html/info.php

Настройка виртуального хоста

Один сервер может обслуживать несколько сайтов через виртуальные хосты. Для каждого создаётся отдельный конфиг в /etc/apache2/sites-available/. Сначала подготовьте каталог сайта:

mkdir -p /var/www/example/public
chown -R www-data:www-data /var/www/example

Создайте конфиг /etc/apache2/sites-available/example.conf:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example/public

    <Directory /var/www/example/public>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example-error.log
    CustomLog ${APACHE_LOG_DIR}/example-access.log combined
</VirtualHost>

Ключевая строка здесь — AllowOverride All: именно она разрешает файлам .htaccess в каталоге сайта переопределять правила. Без неё .htaccess игнорируется, и половина CMS работать не будет. Включите сайт и перезагрузите Apache:

a2ensite example.conf
a2dissite 000-default.conf
apache2ctl configtest
systemctl reload apache2

Модули, .htaccess и красивые URL

Многие CMS требуют модуль rewrite для человекочитаемых адресов. Включите его и перезапустите сервер:

a2enmod rewrite
systemctl restart apache2

После этого правила из .htaccess вроде перенаправления всех запросов на index.php начнут действовать. Это стандартный механизм для WordPress и подобных движков: файл в корне сайта описывает, как формируются ссылки, и Apache применяет его на лету. Удобство в том, что менять правила можно без доступа к основному конфигу и без перезапуска сервера — достаточно отредактировать .htaccess в папке.

У этой гибкости есть цена: обработка .htaccess на каждый запрос немного замедляет сервер, потому что Apache проверяет эти файлы в каждой папке пути. На нагруженных сайтах правила выносят в основной конфиг и отключают .htaccess, задав AllowOverride None. Но для большинства проектов удобство важнее этой микрооптимизации, и .htaccess оставляют включённым.

HTTPS и когда переходить на PHP-FPM

Сайт без шифрования сегодня неполноценен. Проще всего выпустить бесплатный сертификат Let's Encrypt через certbot, который сам настроит виртуальный хост на 443:

apt install certbot python3-certbot-apache -y
certbot --apache -d example.com -d www.example.com

Certbot добавит SSL-хост, пропишет пути к сертификатам и настроит редирект с 80 на 443, а автопродление уже включено таймером. На этом типовой сайт на Apache с mod_php полностью готов.

Теперь о честном пределе mod_php. Если сайт растёт и памяти начинает не хватать, а под нагрузкой Apache плодит тяжёлые процессы, стоит перейти на связку с PHP-FPM. Тогда PHP обслуживается отдельным пулом процессов, а Apache работает в экономном событийном режиме. Переключение выглядит так:

apt install php-fpm libapache2-mod-fcgid -y
a2dismod php8.3
a2enconf php8.3-fpm
a2enmod proxy_fcgi
systemctl restart apache2

После этого Apache отдаёт статику и раздаёт PHP через FPM, потребляя заметно меньше памяти под нагрузкой. Это тот случай, когда рост проекта — повод либо сменить схему обработки PHP, либо взять VPS помощнее с запасом RAM и быстрым диском, чтобы держать больше посетителей без деградации.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Чем mod_php отличается от PHP-FPM на Apache?

mod_php встраивает PHP в процесс Apache и проще в настройке, но прожорлив по памяти; PHP-FPM выносит PHP в отдельный пул и эффективнее под нагрузкой.

Почему не работает .htaccess?

Скорее всего в виртуальном хосте не задано AllowOverride All или не включён нужный модуль вроде rewrite; проверьте конфиг каталога и a2enmod rewrite.

Как выпустить бесплатный SSL на Apache?

Установите certbot python3-certbot-apache и выполните certbot --apache -d домен — он сам создаст SSL-хост и настроит автопродление.

Как оплатить VPS под Apache из России?

У MAATRIX доступна оплата картой российского банка, по СБП, криптовалютой или токеном MAAT, иностранная карта не требуется.

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.