LAMP-сервер не работает: причины и пошаговое решение

Когда после команды запуска sudo systemctl start apache2 сайт на локальном LAMP-сервере всё равно не открывается, первым делом нужно проверить статус службы: sudo systemctl status apache2 — именно там система сообщит, упал ли веб-сервер при старте, занят ли порт или конфигурация содержит ошибку. Это самая быстрая точка входа в диагностику, и она работает независимо от дистрибутива.

Аббревиатура LAMP объединяет Linux, Apache, MySQL (или MariaDB) и PHP — отказ любого из этих компонентов приводит к тому, что «lamps не работает» целиком, хотя виноват обычно только один узел. Ниже разберём, как определить сбойный компонент и вернуть стек в рабочее состояние без переустановки системы.

Определяем, какой компонент стека вышел из строя

Не стоит сразу переустанавливать пакеты. Сначала выясните, какое звено цепочки отказало: веб-сервер, база данных или интерпретатор PHP. Для этого достаточно трёх коротких проверок.

  • 🔍 Откройте в браузере http://localhost — если страница недоступна вообще, проблема на уровне Apache или сети.
  • 🗄️ Выполните sudo systemctl status mysql (или mariadb) — так проверяется состояние базы данных.
  • 🐘 Создайте в корне сайта файл с <?php phpinfo(); и откройте его — если вместо информации отображается исходный код, PHP не подключён к Apache.
  • 📄 Загляните в логи: /var/log/apache2/error.log и журнал СУБД — там почти всегда есть точная причина сбоя.
📊 Какой компонент LAMP-стека чаще всего вызывает у вас проблемы?
Apache / Nginx
MySQL / MariaDB
PHP и его модули
Права доступа и конфигурация

Apache не запускается: проверка конфигурации и портов

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

sudo apache2ctl configtest

Если утилита выводит Syntax OK, конфигурация корректна. Если нет — она укажет файл и строку с ошибкой. Вторая типичная причина — занятый порт 80 или 443: его может удерживать другой процесс, например ранее установленный Nginx или другое приложение. Узнать, кто занял порт, поможет команда sudo ss -tlnp | grep :80.

Также проверьте, что сервис не просто запущен, а добавлен в автозагрузку: sudo systemctl enable apache2. Иначе после перезагрузки системы сайт снова «пропадёт», и будет казаться, что стек нестабилен.

Проблемы с MySQL или MariaDB

База данных может не стартовать из-за повреждённых таблиц, нехватки места на диске или неверных прав на каталог данных. Начните с просмотра статуса и последних строк журнала — они подскажут направление поиска.

sudo systemctl status mysql

sudo journalctl -u mysql -n 50

⚠️ Внимание: не удаляйте файлы в каталоге данных СУБД (обычно /var/lib/mysql) вручную. Это почти гарантированно приводит к потере баз. Если есть подозрение на повреждение таблиц, сначала сделайте резервную копию каталога целиком.

Если служба стартует, но сайт выдаёт ошибку подключения к базе, проверьте учётные данные в конфигурации сайта и убедитесь, что пользователь БД существует и имеет права на нужную базу. Отдельно убедитесь, что на разделе диска есть свободное место: df -h — переполненный диск является частой и при этом неочевидной причиной отказа MySQL.

PHP не обрабатывается: браузер показывает код или скачивает файл

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

sudo apt install php libapache2-mod-php

sudo a2enmod php

sudo systemctl restart apache2

Точное имя модуля и его версия зависят от вашего дистрибутива и установленной версии PHP — сверьтесь с документацией своей системы. Если PHP установлен, но скрипты выдают «белый экран», включите отображение ошибок на время отладки через директивы display_errors и error_reporting в php.ini, а после устранения проблемы снова отключите вывод ошибок на публичном сервере.

Права доступа и владельцы файлов

Ошибка 403 Forbidden при работающем Apache почти всегда указывает на права доступа. Веб-сервер должен иметь возможность читать файлы сайта и заходить в каталоги по всему пути. Проверьте владельца и права на корневую папку сайта, а также директивы Require all granted в конфигурации виртуального хоста.

  • 📁 Убедитесь, что каталог сайта доступен для чтения пользователю, от имени которого работает Apache (обычно www-data в Debian/Ubuntu).
  • 🔑 Проверьте права на все родительские каталоги пути — ограничение на любом уровне заблокирует доступ.
  • 🧩 Если используется SELinux (например, в CentOS/RHEL), он может блокировать доступ даже при корректных правах — проверьте его журнал аудита.

☑️ Быстрая диагностика неработающего LAMP

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

Сводная таблица симптомов и причин

СимптомВероятная причинаЧто проверить
Сайт недоступен, нет ответаApache остановлен или порт занятsystemctl status apache2, ss -tlnp
Ошибка подключения к базе данныхMySQL не запущен или неверные учётные данныеjournalctl -u mysql, конфиг сайта
Браузер показывает PHP-кодМодуль PHP не подключёнlibapache2-mod-php, a2enmod php
403 ForbiddenПрава доступа или SELinuxВладелец файлов, журнал аудита
500 Internal Server ErrorОшибка в .htaccess или скриптеerror.log, синтаксис .htaccess
⚠️ Внимание: не отключайте фаервол полностью «для проверки» на сервере, доступном из интернета. Если нужно проверить, не блокирует ли он соединения, временно разрешите только нужные порты и верните правила после диагностики.

Если ничего не помогло: переустановка и логи

Когда пошаговая диагностика не дала результата, остаются два пути. Первый — внимательно перечитать логи: журналы Apache и MySQL содержат точную причину отказа практически всегда, просто она может находиться не в последних строках, а раньше по времени сбоя. Второй — переустановка отдельного компонента с сохранением данных: например, sudo apt install --reinstall apache2 восстановит файлы пакета, не затрагивая ваши сайты.

Где искать логи компонентов LAMP

Apache: /var/log/apache2/error.log и access.log. MySQL/MariaDB: journalctl -u mysql или файлы в /var/log/mysql/. PHP: ошибки обычно попадают в лог Apache, если не настроен отдельный error_log в php.ini. Системные события: journalctl -xe.

Перед переустановкой обязательно скопируйте конфигурационные файлы и дампы баз — это займёт несколько минут, но убережёт от потери данных при ошибке в процессе. Если стек развёрнут на хостинге, а не на локальной машине, часть описанных действий может быть недоступна — в этом случае обратитесь к документации вашего провайдера.

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

Почему после перезагрузки сервера сайт снова не работает?

Скорее всего, службы не добавлены в автозапуск. Выполните sudo systemctl enable apache2 и sudo systemctl enable mysql, чтобы они стартовали вместе с системой.

Браузер скачивает PHP-файл вместо открытия страницы — что это?

Apache не передаёт файл интерпретатору PHP. Проверьте, установлен ли пакет libapache2-mod-php и включён ли соответствующий модуль, затем перезапустите веб-сервер.

Как узнать, какой процесс занял порт 80?

Команда sudo ss -tlnp | grep :80 покажет процесс, который слушает порт. Далее его можно остановить или перенастроить на другой порт.

Ошибка 500 появилась после редактирования .htaccess. Что делать?

Верните прежнюю версию файла или временно переименуйте его — если сайт заработал, ищите синтаксическую ошибку в директивах. Подробности всегда есть в error.log веб-сервера.

Можно ли переустановить Apache без потери настроек и сайтов?

Да, файлы сайтов в /var/www и ваши конфигурации при переустановке пакета обычно сохраняются, но перед любыми действиями сделайте резервную копию конфигов и баз данных.