Почему мой Apache не работает после обновления до Ubuntu 14.04?


36
[aman@aman-Inspiron-1440:~$ apache2
[Mon Apr 21 17:36:38.019213 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Mon Apr 21 17:36:38.019345 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Mon Apr 21 17:36:38.019370 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Mon Apr 21 17:36:38.019385 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Mon Apr 21 17:36:38.019414 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.028756 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.029032 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.029056 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}

Это содержимое /etc/apache2/apache2.confфайла.


3
Это не работает, потому что у вас есть синтаксическая ошибка в строке 74 /etc/apache2/apache2.conf . Пожалуйста, загрузите содержимое этого файла, чтобы увидеть, что не так.
Лусио

2
Поиск в Google со вчерашнего дня,
Amandeep Singh

загрузил файл по адресу: pastebin.ubuntu.com/7298873
Амандип Сингх


Нужно ли переместить / var / www в / var / www / html ??
Амандип Сингх

Ответы:


31

У меня была такая проблема: причина в файле

/etc/apache2/sites-available/000-default.conf 

где корень изменился:

до обновления = /var/www
после обновления =/var/www/html

Поэтому отредактируйте, чтобы изменить этот файл

sudo gedit /etc/apache2/sites-available/000-default.conf

И перезапустить apache

sudo service apache2 restart

Поскольку это проблема, с которой может столкнуться ОП, это не та проблема, с которой он сталкивается в данный момент. В любом случае, как я объяснил в этом ответе , я не рекомендую редактировать 000-default.confфайл.
Дан

Его работа после перехода в / var / www / html
Amandeep Singh

2
+1 Я тоже не мог понять это. Ты мужчина!
gion_13

2
В моем случае у меня все еще есть эта проблема, и htmlподпапка уже существует, что в моем случае фактически не имеет значения, так как все мои сайты используют VirtualHosts
jhbsk

4
Это не может быть ответом! Вышеуказанная ошибка не связана с DocumentRootнастройкой.
Reinier Post

50

У меня была эта проблема, хотя Apache работал на меня. Я просто хотел сделать быстрый

$ /usr/sbin/apache2 -V

найти значение SERVER_CONFIG_FILE. Поскольку это не способ запустить apache2, он перестает работать с ошибками, которые публикует OP. Быстрый и грязный обходной путь - это просто установить envvars, которые отсутствуют первыми:

$ source /etc/apache2/envvars
$ /usr/sbin/apache2 -V

Это устанавливает переменную APACHE_LOCK_DIR, и все хорошо ( -D SERVER_CONFIG_FILE="apache2.conf").


1
Это сработало для меня. Та же проблема, Apache работал и работал, но работать apache2 -Sне удалось. Все исправлено.
Twisty

Странный. Это не сработало для меня. Это имеет смысл относительно того, почему это должно все же.
Тайлер Кромптон

@TylerCrompton - Как это не удалось? В чем была ошибка?
полоса

Это не имело никакого значения. Я все еще испытывал проблему, которая была у OP. Запуск apache2от имени root исправил проблему.
Тайлер Кромптон

4
Более простая альтернатива:apache2ctl -V
Reinier Post

14

Симптомы и решение

На многих сайтах и ​​форумах по вопросам и ответам люди путают симптомы и реальные причины. Я только что обновил сервер Ubuntu с 13.10 до 14.04.1 и столкнулся с точно такими же симптомами, описанными OP, включая:
1 - apache, очевидно, не работает. 2- переменная конфигурации apache не определена. 3 - синтаксическая ошибка, упомянутая ОП.

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

Различные корневые проблемы могут привести к тому, что администраторы зайдут на сайты, подобные этому, с примерно одинаковым описанием: «Я обновил ОС, и теперь apache не работает ...»

Одна конкретная причина

Имея все те же очевидные симптомы, что и ОП, меня привлек этот вопрос. К сожалению, единственный ответ, который содержал правильную подсказку о реальной основной причине моей проблемы, был понижен (-1), отправленный пользователем 1469291 с повторением 1 !! Поэтому я искал другие сайты, пока не нашел четкого объяснения проблемы (и тем самым решения).

Следующее решение может не решить реальную проблему ОП, но я уверен, что оно поможет другим, кто может быть привлечен к этому вопросу по тем же причинам, что и я.

/etc/apache2/apache2.conf содержит:

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

это означает, что будут загружены только файлы конфигурации сайта в / etc / apache2 / sites-enabled / end. в .conf. Старые ссылки в этом каталоге будут игнорироваться.

Раньше это были просто сайты с поддержкой / *. Вот почему все мои файлы конфигурации виртуального хоста, которые я просто назвал ww1.example.com, ww2.example.com и т. Д., Работали, но неожиданно и первоначально по необъяснимым причинам перестали работать после обновления.

Итак, либо измените указанную выше директиву и перезагрузите apache, либо, как я, вручную удалите все старые символические ссылки в sites-enabled /, переименуйте все файлы в sites-available /, добавив суффикс .conf, а затем снова включите каждый сайт индивидуально.

Кроме того, директива по умолчанию в apache.conf более строгая:

<Directory />
  Options FollowSymLinks
  AllowOverride None
  Require all deny
</Directory>
<Directory /var/www/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

Поэтому, если вы размещаете свои виртуальные сайты в / home / user / где-нибудь, убедитесь, что директива переопределена соответствующим образом.


1
Это хороший ответ. Лучше понять изменения, прежде чем торопиться и жаловаться, что что-то не работает.
MikeNGarrett

1
Спасибо за это, я не осознавал, что переименование файла не удалило символическую ссылку с включенных сайтов.
Бенно

Это не дает решения.
Reinier Post

6

Присмотревшись к вашей проблеме, вы просто бежите apache2. Чтобы запустить apache в Ubuntu, выполните следующую команду:

sudo apache2ctl start

Конфигурация Apache разделена на несколько файлов, один из которых - переменные среды. Когда вы работаете только apache2, эти переменные не установлены.

Сценарий apache2ctl загрузит переменные (и, при необходимости, также выполнит некоторые другие действия) перед запуском apache apache2 -k start.


1
#sudo apache2ctl start httpd (pid 1390) уже запущен
Amandeep Singh

Так в чем же тогда проблема?
Дан

@AmandeepSingh: попробуйте sudo apache2ctl restartвместо этого.
Шеффилд

1
@scheffield Пробовал эту команду несколько раз. Проблема была связана с изменением расположения корневой папки в новой версии Apache с / var / www на / var / www / html. Я переместил все файлы в подпапку / html, и это сработало.
Амандип Сингх

4

Отредактируйте конфигурацию sudo leafpad /etc/apache2/apache2.conf:

# Include the virtual host configurations:

#before upgrade = 
IncludeOptional sites-enabled/*
#after upgrade = 
/IncludeOptional sites-enabled/*.conf

или удалите файл.


+1. Ответ был отклонен, но он содержал решение проблемы многих администраторов, которые могут посетить этот вопрос.
Августин

2

Ответ Августина сработал для меня, когда все мои виртуальные хосты исчезли после обновления сервера с 12.04 LTS до 14.04 LTS. Я бы проголосовал, если бы у меня была такая репутация.

Следующая команда добавит .confсуффикс ко всем символическим ссылкам, в /etc/apache2/sites-enabledкоторых его еще нет:

sudo find /etc/apache2/sites-enabled -type l ! -name '*.conf' -exec rename 's/$/.conf/' {} \;

Кроме того, произошло изменение от использования Allow from/ Deny fromсинтаксиса Requireв модуле mod_authz_host ( здесь ссылка на документацию 2.2).

Следующая команда будет редактировать общее использование Order allow, denyследует Allow from allбыть Require all grantedвместо того, чтобы :

perl -0777 -pi.bak -e 's/Order\s+allow\s*,\s*deny\s*\n\s*Allow\s+from\s+all/Require all granted/sg' /etc/apache2/sites-available/* 

1

На самом деле документальный документ действительно меняется между точным и достоверным с / var / www на / var / www / html. Плохо, что скрипт do-release-upgrade не регрессирует назад.

A) Любой из них действителен, но HTML более обычен. CentOS является влиятельным в этом отношении. Страница "это работает" теперь более зрелая.

Б) Вам не нужно использовать / var / www / html, но если вы делаете ...

  • вам нужно перенести ваш контент или его псевдоним (не рекомендуется).
  • Вам нужно обновить в любом месте, на которое ссылается старое местоположение.
  • особенно скрипты резервного копирования / восстановления / настройки.

C) И это может быть легче построить с нуля и мигрировать.

D) Этот признак будет возникать, если вы "sudo apache2 -k graceful" из коробки на Trusty, обновляете или нет из-за отсутствия envvars в области действия? Вместо этого используйте «sudo apache2ctl start / stop / restart».


0

В моем случае:

  • htmlВложенный в /var/www/уже существовал , но до сих пор я получаю сообщение об ошибке:AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf
  • Я уже решил разместить свои сайты в моем пользовательском корне, например /home/{user}/sites/вместо стандартного/var/www/html
  • Я использую Apache 2.4.7 (вы можете проверить свою версию с помощью apache2 -v)

Как я решил проблему в пять простых шагов:

  1. В /etc/apache2/apache2.confI добавлены следующие после строки 169:

    <Directory /home/{user}/sites/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    
  2. Я удостоверился, что моя конфигурация Виртуального хоста, названная website.confв, /etc/apache2/sites-availableбыла скопирована из значения по умолчанию 000-default.confи выглядела так:

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName website.dev
        ServerAlias www.website.dev
        DocumentRoot /home/{user}/sites/website
    </VirtualHost>
    
  3. Я перезагрузил свой сайт ( sudo a2dissite website && sudo a2ensite website) и мой сервер, и первоначальная ошибка исчезла. WooHoo! Но появился новый: «AH00035: доступ к / запрещен (путь к файловой системе '/ home / {пользователь} / sites'), поскольку у компонента пути отсутствуют разрешения на поиск». Это я решил на шаге 4.

  4. Новая проблема была связана с разрешениями, поэтому я просто установил для каждого из каталогов, ведущих к websiteпапке chmod 755. Каждый из! homeПапка, то {пользователь} папка, папка сайтов, и даже мой сайт папка

  5. После обновления моего браузера website.devвсе загрузилось нормально!

PS У меня уже есть настройки website.devв моем /etc/hostsфайле.

Бонусный совет: для проверки прав доступа к определенной папке вы можете использовать команду stat -c %a /path/to/file/or/folder. Для проверки разрешений каждой части каталога используйте namei -m /path/to/final/folder.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.