Стек LAMP (Linux, Apache, MySQL, PHP) после стандартной установки часто работает неполно: PHP-скрипты отдаются как plain text, Apache не обрабатывает .htaccess, а сайт выдаёт ошибку соединения с базой данных — в большинстве таких случаев причина кроется в отсутствующих или неактивных модулях, которые принято называть «плагинами для лампы».

Под плагинами здесь понимаются три разных слоя: модули Apache, расширения PHP и плагины MySQL/MariaDB. У каждого слоя своя система установки и проверки, и путать их — типичная ошибка новичков. Ниже разберём, какие компоненты действительно нужны для рабочего сервера, как проверить их активность и что делать, если нужный модуль не подключается.

Какие слои плагинов существуют в LAMP

Прежде чем что-то устанавливать, важно понять архитектуру. «Плагин для лампы» — не единая сущность, а компонент одного из трёх подсистем. Модуль Apache отвечает за обработку HTTP-запросов, расширение PHP — за возможности интерпретатора, плагин MySQL — за функции СУБД (аутентификация, хранилища, репликация).

Соответственно, диагностика всегда начинается с вопроса: какой именно слой даёт сбой? Если страница отдаётся как текст — проблема на стыке Apache и PHP. Если скрипт ругается на неизвестную функцию — не хватает расширения PHP. Если ошибка на уровне базы — смотрим плагины и настройки MySQL.

  • 🔧 Модули Apache: mod_rewrite, mod_ssl, mod_php (или связка с PHP-FPM), mod_headers
  • 🐘 Расширения PHP: mysqli/pdo_mysql, mbstring, curl, gd, xml, opcache
  • 🗄️ Плагины MySQL/MariaDB: плагины аутентификации, движки хранения, компоненты аудита
  • 🧩 Вспомогательные пакеты: phpmyadmin, certbot для SSL, кэширующие прослойки

Проверка уже установленных модулей

Первый шаг — не установка, а аудит. На большинстве дистрибутивов часть модулей уже активна, и повторная установка ничего не даст. Для Apache используйте команду:

apache2ctl -M    # Debian/Ubuntu

httpd -M # CentOS/RHEL

Вывод покажет список загруженных модулей. Ищите в нём rewrite_module, ssl_module и модуль интеграции PHP. Для проверки расширений PHP выполните php -m в терминале — получите список подключённых расширений CLI-версии. Учтите нюанс: конфигурация PHP для командной строки и для веб-сервера может различаться, поэтому надёжнее создать тестовый файл с <?php phpinfo(); ?> и открыть его через браузер.

Для MySQL список активных плагинов выводится SQL-запросом:

SHOW PLUGINS;

В колонке Status должно стоять ACTIVE у нужных компонентов. Если плагин в статусе DISABLED или отсутствует вовсе — его потребуется установить или активировать через конфигурацию сервера.

💡

Проверяйте модули именно в том контуре, где работает сайт: CLI-версия PHP и веб-версия могут иметь разные наборы расширений.

Минимальный рабочий набор модулей Apache

Для типового сайта на LAMP критичны несколько модулей Apache. Без mod_rewrite не будут работать «красивые» URL в WordPress и большинстве CMS. Без mod_ssl невозможен HTTPS. Интеграция PHP обеспечивается либо модулем mod_php, либо через PHP-FPM с проксированием — второй вариант сейчас встречается чаще.

Активация модуля в Debian/Ubuntu делается командой a2enmod, после чего требуется перезапуск Apache:

sudo a2enmod rewrite

sudo systemctl restart apache2

В CentOS/RHEL модули подключаются редактированием конфигурационных файлов в каталоге /etc/httpd/conf.modules.d/ — там должна присутствовать строка LoadModule для нужного модуля. Точные имена файлов и модулей зависят от версии пакета, поэтому сверяйтесь с документацией вашего дистрибутива.

⚠️ Внимание: для работы .htaccess одного mod_rewrite недостаточно — в конфигурации виртуального хоста для каталога сайта должна быть разрешена директива AllowOverride со значением, отличным от None. Иначе правила перезаписи просто игнорируются без каких-либо ошибок в логах.
📊 Какой слой LAMP чаще всего вызывает у вас проблемы?
Модули Apache
Расширения PHP
Плагины и настройки MySQL
Интеграция компонентов между собой

Расширения PHP: что ставить в первую очередь

Набор расширений PHP зависит от задач сайта, но есть базовый комплект, без которого большинство CMS и фреймворков не запустится или будет работать с ограничениями. Установка в Debian/Ubuntu выполняется через пакетный менеджер, например:

sudo apt install php-mysql php-mbstring php-curl php-gd php-xml php-opcache

Названия пакетов могут включать версию PHP (например, php8.2-mbstring) — уточните установленную версию командой php -v и ставьте расширения именно под неё. После установки перезапустите Apache или PHP-FPM, иначе расширения не подхватятся.

☑️ Проверка расширений PHP после установки

Выполнено: 0 / 5

Если расширение установлено, но не появляется в phpinfo(), возможные причины таковы: вы проверяете не тот SAPI (CLI вместо FPM), используется несколько версий PHP одновременно и сайт работает на другой, либо конфигурация расширения лежит в каталоге, который не подключается. Проверьте вывод php --ini — он покажет, какие ini-файлы реально загружаются.

Плагины MySQL и типичные проблемы с аутентификацией

На уровне СУБД чаще всего проблемы возникают не из-за отсутствия плагинов, а из-за плагина аутентификации пользователя. В новых версиях MySQL и MariaDB способ проверки пароля по умолчанию может отличаться от того, что ожидает старый PHP-код или CMS. Симптом — ошибка подключения к базе при заведомо верном логине и пароле.

Проверить, какой плагин аутентификации назначен пользователю, можно запросом к системной таблице (синтаксис зависит от версии СУБД):

SELECT user, host, plugin FROM mysql.user;

Если возникла несовместимость, безопасный путь — создать отдельного пользователя для приложения с поддерживаемым методом аутентификации, а не менять глобальные настройки сервера. Конкретный синтаксис CREATE USER / ALTER USER различается между MySQL и MariaDB и между версиями, поэтому сверяйтесь с официальной документацией вашей СУБД.

⚠️ Внимание: не меняйте плагин аутентификации для системного пользователя root без крайней необходимости — можно потерять доступ к серверу баз данных. Сначала убедитесь, что есть запасная учётная запись с административными правами.
Почему phpMyAdmin не подключается после установки MySQL

Частая причина — несовпадение плагина аутентификации пользователя СУБД с тем, что поддерживает клиентская библиотека PHP. Решение — создать отдельного пользователя с совместимым методом аутентификации и ограниченными правами, либо обновить клиентские компоненты. Точные команды зависят от версии MySQL/MariaDB.

Сравнение способов интеграции PHP с Apache

Выбор между mod_php и PHP-FPM влияет на производительность, изоляцию и удобство управления расширениями. Ниже — обобщённое сравнение без привязки к конкретным версиям.

Критерийmod_phpPHP-FPM
АрхитектураPHP встроен в процесс ApacheОтдельный демон, Apache проксирует запросы
Модель ApacheОбычно preforkПозволяет использовать event MPM
Изоляция сайтовОбщий контекстОтдельные пулы с разными настройками
Перезапуск при смене php.iniПерезапуск ApacheПерезапуск только пула FPM
Типовой сценарийПростые конфигурацииНесколько сайтов, разные версии PHP

Для сервера с несколькими сайтами или разными версиями PHP вариант с FPM практичнее: каждый пул настраивается отдельно, и сбой одного сайта не тянет за собой остальные. Для одиночного простого проекта mod_php проще в настройке.

💡

Держите список установленных пакетов в текстовом файле (например, вывод dpkg -l | grep php). При переносе сервера или переустановке это сэкономит часы на восстановление набора расширений.

Диагностика: модуль установлен, но не работает

Если после всех действий нужная функция недоступна, идите по цепочке от простого к сложному. Сначала смотрите логи: Apache пишет ошибки в error.log (путь зависит от дистрибутива и настроек виртуального хоста), PHP-FPM — в свой журнал, MySQL — в error log СУБД. Сообщение об ошибке почти всегда указывает на реальную причину точнее, чем симптомы в браузере.

Далее проверьте синтаксис конфигурации перед перезапуском: apache2ctl configtest (или apachectl configtest) покажет ошибки в файлах Apache, php -l проверит синтаксис PHP-файлов. Для FPM есть команда проверки конфигурации пула — её имя зависит от версии пакета.

  • 🔍 Проверьте, что перезапущен именно тот сервис, который обслуживает сайт (Apache или FPM-пул)
  • 🧪 Убедитесь, что сайт использует ожидаемую версию PHP — на одном сервере их может быть несколько
  • 📄 Сравните вывод php -m и phpinfo() — расхождение указывает на разные конфигурации
  • 📋 Изучите лог ошибок сразу после воспроизведения проблемы, а не «вообще»
⚠️ Внимание: не устанавливайте расширения PHP «вручную» через pecl или компиляцию, если существует готовый пакет вашего дистрибутива. Самосборные модули ломаются при обновлении PHP, и отладка таких конфликтов значительно сложнее.
💡

90% проблем «плагин не работает» решаются тремя действиями: проверка phpinfo() в веб-контуре, перезапуск правильного сервиса и чтение свежего лога ошибок.

Часто задаваемые вопросы

Чем плагин отличается от модуля и расширения в контексте LAMP?

В обиходе всё это называют «плагинами», но технически: модули — компоненты Apache, расширения — компоненты PHP, плагины — компоненты MySQL. У каждого слоя свои команды установки и активации, поэтому сначала определите, к какому слою относится нужная функция.

PHP-файл скачивается или показывается как текст — что сломалось?

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

Как узнать, какая версия PHP обслуживает сайт?

Создайте файл с <?php phpinfo(); ?> в корне сайта и откройте его в браузере — версия указана вверху страницы. Команда php -v в терминале показывает версию CLI, которая может отличаться. После проверки удалите файл с phpinfo: он раскрывает лишнюю информацию о сервере.

Нужно ли ставить все доступные расширения PHP «про запас»?

Нет. Лишние расширения увеличивают поверхность атаки и потребление памяти, а некоторые могут конфликтовать между собой. Ставьте только то, что требует ваше приложение — список зависимостей обычно есть в документации CMS или фреймворка.

После обновления PHP пропали расширения — почему?

Расширения привязаны к конкретной версии PHP. При обновлении мажорной или минорной версии пакеты расширений нужно установить заново под новую версию. Проверьте вывод php -m и доустановите недостающие пакеты для актуальной версии.