Когда после команды запуска 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и журнал СУБД — там почти всегда есть точная причина сбоя.
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
Сводная таблица симптомов и причин
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Сайт недоступен, нет ответа | 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 и ваши конфигурации при переустановке пакета обычно сохраняются, но перед любыми действиями сделайте резервную копию конфигов и баз данных.