Многие новички, которые пытаются настроить свой домашний веб-сервер на основе Apache часто сталкиваются с ошибкой, что Apache не запускается. Благо сейчас в Ubuntu веб-сервер будет правильно работать по умолчанию и запустится, если вы не будете менять настройки, но раньше и в других дистрибутивах приходилось настраивать различные параметры и возникали ошибки.
В этой небольшой статье мы рассмотрим почему Apache не работает, что может стать причиной этой проблемы и как ее решить. Инструкция подойдет не только для Ubuntu, но и для других Linux дистрибутивов.
Содержание статьи
Почему не запускается Apache?
Вы можете столкнуться с такой проблемой по разным причинам, давайте сначала рассмотрим основные из них, чтобы вы знали что дальше делать:
- Ошибка в конфигурационном файле - вы меняли конфигурацию и настроили что-то неправильно из-за этого программа не может запустится;
- Права доступа - у программы нет прав доступа к каким-то важным для нее файлам, например, файлам логов, модулей или конфигурационным файлам;
- Не запускается служба apache при загрузке, но при запуске из консоли все работает - проблема в том, что на момент запуска загружены еще не все необходимые службы;
- Неверно указанно доменное имя - такая ошибка довольно часто встречается на локальных компьютерах;
А теперь рассмотрим более подробно почему так происходит и как решить проблему.
Как решить проблему с Apache?
Самое первое что вам нужно сделать в любом случае, если что-то не работает - это смотреть логи и информацию об ошибках. Только там вы сможете точно узнать что произошло. Самый простой способ это сделать, воспользоваться подсказкой systemd, которую она выдает при ошибке запуска:
То есть нам нужно выполнить systemctl status apache2.service или journalctl -xe чтобы получить больше сведений. Выполните сначала первую команду:
systemctl status apache2.service
Мы сразу же видим причину проблемы - ошибка в конфигурационном файле, в директиве Listen, а теперь пробуем другую команду:
journalctl -xe
Только ее нужно выполнять сразу же, как была выполнена попытка перезапуска apache, потому что скоро буфер лога будет затерт и вы там ничего не увидите. Но здесь сообщается то же сообщение об ошибке в конфигурационном файле, даже видно строку - 54. Еще можно посмотреть error.log, но туда сообщения пишутся не всегда:
cat /var/log/apache2/error.log
Дальше вы можете проверить конфигурационный файл на корректность с помощью такой команды:
apache2ctl -t
Тут будут показаны даже предупреждения, которые не влияют на работу сервиса. Все серьезные ошибки нужно исправить если таковые имеются, возможно именно они препятствуют запуску.
Следующая важная проблема - это права доступа. Если Apache запускается от имени пользователя www-data, то у этого пользователя должен быть доступ на чтение к папке где лежат документы веб-сайта, а также ко всем папкам выше нее, также должен быть доступ на чтение и запись для логов и конфигурационных файлов. Проверить права можно с помощью команды namei, это аналог ls, который отображает полное дерево прав:
namei -l /var/www/public_html/
Таким же образом проверяем папку с логами:
namei -l /var/log/apache2/
Как видите, у меня папка /var/www/public_html принадлежит пользователю root, но на папку public_html установлены права чтения и записи для всех пользователей. Поэтому проблем нет, а на папку с логами в качестве группы установлена adm, в эту группу входит пользователь www-data, так что тут тоже проблем нет. Если у вас что-то отличается и вы видите что прав недостаточно, то либо измените владельца папки с файлами веб-сайтов на www-data, либо дайте больше разрешений:
chown -R www-data /var/www/public_html/
Также, если в вашей системе включен SELinux, то вы можете его отключить на время, чтобы понять не в нем ли проблема:
setenforce 0
Другой момент, который может вызвать ошибку, это если на порту, который вы хотите использовать для веб-сервера уже запущен какой-то процесс, например, nginx или lighttpd, в таком случае, его нужно остановить:
sudo systemctl stop nginx
sudo systemctl stop lighttpd
Или вы можете попытаться изменить порт на другой, для этого откройте конфигурационный файл веб-сервера и найдите там строку Listen:
Listen 80
Если такой строки еще нет, то вы можете ее создать. Далее просто измените номер порта с 80 на любой удобный, например, 8080
Listen 8080
Дальше про ошибку старта при загрузке. Такая ошибка случалась в версиях ниже 2.2.4, если вы используете эту или более новую версию, то эта проблема вам не страшна. Она была вызвана тем, что Apache с SSL не хотел запускаться без папки /var/run/apache2, которой не было на момент загрузки. Самый простой способ решить проблему - отключить модуль ssl:
a2dismod ssl
Второй способ более сложный - добавьте в конфигурационный файл /etc/init.d/apache2 такую строку:
[ -d /var/run/apache2 ] || mkdir /var/run/apache2
Последняя проблема, о которой мы говорили - это когда неверно указанно имя сервера, на котором запускается Apache. Этой ошибке тоже были подвержены только ранние версии программы. Тогда при попытке запуска программа выдавала сообщение:
Failed to resolve server name for localhost
И дальше не запускалась. Чтобы решить эту проблему нужно было либо создавать виртуальные хосты, либо прописать в основном конфигурационном файле директиву ServerName, в которой будет указанно имя этого компьютера:
ServerName sergiy-pc
А также ассоциировать это имя с localhost в файле hosts:
sudo vi /etc/hosts
Дальше было достаточно перезапустить Apache и все начинало работать.
Выводы
В этой статье мы рассмотрели несколько причин почему не запускается Apache и примеров их решения. Причин может быть множество, но мы разобрали только самые главные, которые встречаются наиболее часто. Надеюсь, эта информация была для вас полезной, если у вас остались вопросы, спрашивайте в комментариях! А для тех кого интересует еще один способ решения проблемы xampp apache не запускается для Windows есть видео:
Вопрос изначально задан неверно. Нужно спросить не "Почему Апач не запускается", а "Почему я использую Апач в 2017-ом году"...
хех, вспомнилось, как то прикупил дешевый VPS, выбрал предустановленный дистр, зашел по ssh, обновился, увидел что влепило мне Апач по умолчанию, проверил в браузере - таки да, выдает стартовую апача, грохнул апач, установил nginx, захожу проверить - всеравно апач висит, чищу кэш браузера, проверяю - опять апач, лезу на сервак, проверяю запущен ли nginx служба, ищу по всему серверу упоминания апача, удаляю недобитков, пропущенных apt, ребучу навсякий случай, проверяю - апач висит.
Начинается легкая истерика.
И только немного погодя, до меня доходит проверить `/var/www/` (не помню как там по-дефолту путь указан) и оказывается что апач влепил свою страничку, а nginx услужливо не стал ничего менять.
Спасибо! Инструкция помогла.
А по поводу комментария выше «Почему я использую Апач в 2017-ом году».
Потому что есть наследие старого кода и старых технологий, которые приходится поддерживать.
Спасибо, огромное спасибо просто спасли. Сразу нашла где всё сломала.
Не могу найти решение
Проблема в следующем. стоит Apache c SSL на Centos, apache не запускается автоматически при запуске железа, так как требуется вводить пароль от сертификата, если есть решение, то прошу подсказать, заранее Спасибо!
У меня чуть другая проблема, он не желает стартовать автоматически, в Docker. Вручную, все хорошо, стартует. Правда, с предупреждением, но я так понимаю оно ни на что не повлияет:
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf:
И меня явно это не страивает, мне нужно запустить и чтобы сайт уже крутился, а не идти в консоль и запускать руками. Не сталкивались случайно?