Змінна конфігурація 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?
етагенкло

Відповіді:


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або FQDN.


1
Ви маєте рацію щодо сценарію init. Потім я додав 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

Джерело своїх коледжів виконуючи так:

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"

/etc/apache2/envvarsне існує
Марк Річман

6
Цей файл існує в моїй системі ubuntu, але оболонка не розпізнає його як сценарій оболонки, тому мені потрібно це: source / etc / apache2 / envvars; apache2 -V
Бен Кроуелл

6
Може просто використовувати apachectl -Vзамість завантаження змінних середовища вручну.
Сем Сенерт

Якщо все ще не працює, спробуйте source /etc/apache2/envvars && sudo -E apache2 -Vувійти, як rootі зробити за відповіддю вище. Подання apache2 env звичайному користувачеві, якому потім потрібно використовувати sudo, не працюватиме без "-E". Звичайні користувальницькі документи не можуть читати приватну папку сертифікатів серед інших проблем. Ви отримаєте помилку. Вам потрібно судо -E або запустити під кореневим рахунком повністю.
bshea

Це дуже корисно для запуску Apache як cmd переднього плану. НаприкладCMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Аластер Маккормак

7

Перевірте свій /etc/apache2/envvarsAPACHE_LOCK_DIR. У моєму Ubuntu 12.04, це означає /var/lock/apache2$SUFFIX, що SUFFIX зазвичай порожній.

Перевірте, чи існує каталог і чи він може бути записаний.

Може бути, що файл 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'

Якщо нічого не працює, я б спробував перевстановити пакет (и).


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
прочитайте спочатку, саме цей рядок був наданий, і також було пояснено, чому це не правильна відповідь.
асдмін

-2

Потрібно оновити DocumentRoot від /var/www/htmlдо/var/www

Відредагуйте файл /etc/apache2/sites-available/000-default.conf наступним чином

DocumentRoot /var/www

-2

Це працює для мене

sudo -u root bash -c "source /etc/apache2/envvars; apache2 -V"

У питанні виникла проблема (повідомлення про помилку щодо ServerName) та невдалий метод налагодження (що викликано тим, що не з'являються змінні середовища) .Ваша відповідь стосується методу налагодження, а не питання.
асдмін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.