Конфигурационная переменная Apache2 не определена

65

Я установил apache2 на Ubuntu 13.10. Если я попытаюсь перезапустить его, используя

sudo /etc/init.d/apache2 restart

Я получаю это сообщение:

AH00558: apache2: не удалось надежно определить полное доменное имя сервера, используя 127.0.1.1. Установите директиву ServerName глобально, чтобы подавить это сообщение

Поэтому я прочитал, что я должен отредактировать мой httpd.confфайл. Но, поскольку я не могу найти его в /etc/apache2/папке, я попытался найти его с помощью этой команды:

/usr/sbin/apache2 -V

Но вывод, который я получаю, таков:

[Fri Nov 29 17:35:43.942472 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Fri Nov 29 17:35:43.942560 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Fri Nov 29 17:35:43.942602 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Fri Nov 29 17:35:43.942613 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Fri Nov 29 17:35:43.942627 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.947913 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.948051 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.948075 2013] [core:warn] [pid 14655] 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}

Строка 74 из /etc/apache2/apache2.confэтого:

Mutex file:${APACHE_LOCK_DIR} default

Я посмотрел на мой /etc/apache2/envvarфайл, но я не знаю, что с ним делать.

Что я должен делать?

Курт Бурбаки
источник
Что находится в вашем файле envvars?
etagenklo

Ответы:

60
[Fri Nov 29 17:35:43.942472 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined

Это сообщение отображается потому, что вы напрямую выполнили двоичный файл apache2. В Ubuntu / Debian конфигурация apache опирается на файл envvar, который только активирован.

Если вы запускаете apache с помощью скрипта init или apachectl.

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

Если вы не можете изменить его, измените ServerNameпеременную /etc/apache2/apache2.confна localhostили предпочитаемое полное доменное имя.

ah83
источник
1
Вы правы насчет сценария инициализации. Затем я добавил ServerName localhostк apache2.conf(потому что httpd.confне всегда используется в Ubuntu) , и теперь все работает как надо. Не могли бы вы добавить детали к своим ответам, чтобы я мог пометить их как принятые?
Курт Бурбаки
1
Начав с того, apache2ctlчто у меня не получилось, мне пришлось воспользоваться услугой :sudo service apache2 restart
Эдуард Лопес
Но почему они нарушили apache2команду в первую очередь?
reinierpost
2
Это решение только решает, AH00558: apache2: Could not reliably determine the server's fully qualified domain nameно не решает Config variable ${APACHE_LOCK_DIR} is not defined.
Владимир Вуканац
для меня также я вижу ту же проблему.
indianwebdevil
84

Источник ваши envvars, запустив его так:

source /etc/apache2/envvars

а потом

/usr/sbin/apache2 -V

Вы должны получить:

el@apollo:/home/el$ apache2 -V
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Apr  3 2014 12:20:28
Server's Module Magic Number: 20120211:27
Server loaded:  APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/apache2"
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="apache2.conf"
nadavkav
источник
/etc/apache2/envvarsне существует
Марк Ричман
6
Файл существует в моей системе Ubuntu, но оболочка не распознает его как сценарий оболочки, поэтому мне нужно это: source / etc / apache2 / envvars; apache2 -V
Бен Кроуэлл
6
Можно просто использовать apachectl -Vвместо загрузки переменных среды вручную.
Сэм Шенерт
Если все еще не работает, попробуйте source /etc/apache2/envvars && sudo -E apache2 -Vили войдите как rootи сделать в соответствии с ответом выше. Передача окружения apache2 обычному пользователю, которому затем необходимо использовать sudo, не будет работать без "-E". Обычные пользовательские привилегии не могут прочитать личную папку сертификата среди других проблем. Вы получите ошибку. Вам нужно sudo -E или запустить под учетной записью root полностью.
bshea
Это очень полезно для запуска Apache в качестве переднего плана cmd. НапримерCMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Аластер МакКормак
7

Проверьте свой /etc/apache2/envvarsAPACHE_LOCK_DIR. В моем Ubuntu 12.04 это /var/lock/apache2$SUFFIXSUFFIX обычно пустой.

Проверьте, существует ли каталог и доступен ли для записи.

Может быть, файл envvars поставлен неправильно? Если вы посмотрите на это, /etc/init.d/apache2то увидите, что оно получено.

Мой (по умолчанию) /etc/apache2/envvars:

# envvars - default environment variables for apache2ctl

# this won't be correct after changing uid
unset HOME

# for supporting multiple apache2 instances
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
    SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
else
    SUFFIX=
fi

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2$SUFFIX.pid
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2.
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX

## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

export LANG

## The command to get the status for 'apache2ctl status'.
## Some packages providing 'www-browser' need '--dump' instead of '-dump'.
#export APACHE_LYNX='www-browser -dump'

## If you need a higher file descriptor limit, uncomment and adjust the
## following line (default is 8192):
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'

Если ничего не работает, я бы попытался переустановить пакет (ы).

Erny
источник
2

Как другой сказал, вы должны загрузить (источник) среды перед запуском его непосредственно Другой вариант заключается в использовании: apache2ctlнапример ,

sudo apache2ctl -S

бросить моих хозяев

драм
источник
2

TL; DR; Вы должны запустить apache2, используя то, что у вас уже есть:

sudo /etc/init.d/apache2 {start|stop|restart}

Подробно:

AH00558: apache2: не удалось надежно определить полное доменное имя сервера, используя 127.0.1.1. Установите директиву ServerName глобально, чтобы подавить это сообщение

Это сообщение означает, что вам нужно определить имя вашего сервера / имя домена. Это не обязательно делать для локального хоста / тестирования продукции, вам не нужно об этом беспокоиться.

Когда вы попытаетесь запустить его другим способом, используя только apache2, вы получите эти сообщения об ошибках из-за того, что было сказано ранее: переменные среды определяются, когда вы начинаете использовать скрипт по умолчанию в init.d.

Джордж
источник
-1

Может быть, это решит вашу проблему

sudo bash -c '. /etc/apache2/envvars ; apache2'
Евгений Коньков
источник
1
сначала прочитайте, именно эта строка уже была предоставлена, и также было объяснено, почему это не правильный ответ.
asdmin
-2

Вам необходимо обновить DocumentRoot с /var/www/htmlдо/var/www

Отредактируйте файл /etc/apache2/sites-available/000-default.conf следующим образом

DocumentRoot /var/www
user219404
источник
-2

Это работает для меня

sudo -u root bash -c "source /etc/apache2/envvars; apache2 -V"
Lihnjo
источник
В этом вопросе возникла проблема (сообщение об ошибке ServerName) и сбой метода отладки (который вызван отсутствием источников переменных среды). Ваш ответ касается метода отладки, а не вопроса.
asdmin