Вопрос или проблема
Каждый раз, когда я запускаю sudo apache2 -S
на своем сервере, появляется следующая ошибка:
[Вск. Mar 04 16:17:22.303217 2018] [core:warn] [pid 31405] AH00111: Переменная конфигурации ${APACHE_LOCK_DIR} не определена
[Вск. Mar 04 16:17:22.303414 2018] [core:warn] [pid 31405] AH00111: Переменная конфигурации ${APACHE_PID_FILE} не определена
[Вск. Mar 04 16:17:22.303503 2018] [core:warn] [pid 31405] AH00111: Переменная конфигурации ${APACHE_RUN_USER} не определена
[Вск. Mar 04 16:17:22.303577 2018] [core:warn] [pid 31405] AH00111: Переменная конфигурации ${APACHE_RUN_GROUP} не определена
[Вск. Mar 04 16:17:22.303655 2018] [core:warn] [pid 31405] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
[Вск. Mar 04 16:17:22.306324 2018] [core:warn] [pid 31405:tid 140656836052864] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
AH00526: Ошибка синтаксиса в строке 74 файла /etc/apache2/apache2.conf:
Недопустимая директория Mutex в аргументе file:${APACHE_LOCK_DIR}
Я пробовал несколько вещей, но он продолжает выдавать эти ошибки… Я сделал некоторые изменения в apache2.conf
, но это не сработало, поэтому я отменил свои изменения, попробовал загрузить файл по умолчанию ennvar
, но это не сработало.
Мой файл /etc/apache2/apache2.conf
выглядит так:
# Это основной файл конфигурации сервера Apache. Он содержит
# директивы конфигурации, которые дают серверу его инструкции.
# См. http://httpd.apache.org/docs/2.4/ для получения подробной информации о
# директивах и /usr/share/doc/apache2/README.Debian о специфических для Debian
# рекомендациях.
#
#
# Краткое описание того, как работает конфигурация Apache 2 в Debian:
# Конфигурация веб-сервера Apache 2 в Debian значительно отличается от
# рекомендованного способа настройки веб-сервера. Это связано с тем, что
# в стандартной установке Apache2 в Debian сделаны попытки сделать добавление и
# удаление модулей, виртуальных хостов и дополнительных директив конфигурации
# максимально гибкими, чтобы автоматизировать изменения и администрирование
# сервера было как можно проще.
# Он разделен на несколько файлов, образующих иерархию конфигурации,
# описанную ниже, все находящиеся в каталоге /etc/apache2/:
#
# /etc/apache2/
# |-- apache2.conf
# | `-- ports.conf
# |-- mods-enabled
# | |-- *.load
# | `-- *.conf
# |-- conf-enabled
# | `-- *.conf
# `-- sites-enabled
# `-- *.conf
#
#
# * apache2.conf - это основной файл конфигурации (этот файл). Он объединяет все части,
# включая все оставшиеся файлы конфигурации при запуске
# веб-сервера.
#
# * ports.conf всегда включается из основного файла конфигурации. Он
# должен определять порты, на которых сервер будет слушать входящие соединения,
# которые можно настраивать в любое время.
#
# * Файлы конфигурации в директориях mods-enabled/, conf-enabled/ и sites-enabled/
# содержат определенные фрагменты конфигурации, которые управляют модулями,
# глобальными фрагментами конфигурации или конфигурациями виртуальных хостов
# соответственно.
#
# Они активируются путем создания символьных ссылок на доступные файлы конфигурации из их
# соответствующих *-available/ пар. С ними следует работать, используя наши
# помощники a2enmod/a2dismod, a2ensite/a2dissite и a2enconf/a2disconf. См.
# их соответствующие страницы man для получения подробной информации.
#
# * Двоичный файл называется apache2. Из-за использования переменных окружения
# в стандартной конфигурации, apache2 необходимо запускать/останавливать с
# /etc/init.d/apache2 или apache2ctl. Прямой вызов /usr/bin/apache2 не будет
# работать со стандартной конфигурацией.
# Глобальная конфигурация
#
#
# ServerRoot: Верхняя часть дерева каталогов, под которой хранятся конфигурация сервера,
# ошибки и журналы.
#
# ВНИМАНИЕ! Если вы планируете разместить это на NFS (или другой сетевой)
# смонтированной файловой системе, то пожалуйста, прочитайте документацию Mutex
# (доступна по <URL:http://httpd.apache.org/docs/2.4/mod/core.html#mutex>);
# вы избавите себя от множества неприятностей.
#
# Не добавляйте слэш в конце пути к каталогу.
#
ServerRoot "/etc/apache2"
#
# Файл блокировки сериализации принимает ДОЛЖЕН ХРАНИТЬСЯ НА ЛОКАЛЬНОМ ДИСКЕ.
#
Mutex file:${APACHE_LOCK_DIR} default
#
# PidFile: Файл, в который сервер должен записывать свой номер
# идентификации процесса, когда он запускается.
# Это необходимо задать в /etc/apache2/envvars
#
PidFile ${APACHE_PID_FILE}
#
# Timeout: Количество секунд, прежде чем получение и отправка завершится.
#
Timeout 300
#
# KeepAlive: Разрешать ли постоянные соединения (больше чем
# один запрос на соединение). Установите "Off", чтобы отключить.
#
KeepAlive On
#
# MaxKeepAliveRequests: Максимальное количество запросов, разрешенное
# во время постоянного соединения. Установите в 0, чтобы разрешить неограниченное количество.
# Рекомендуем оставить это число высоким для достижения максимальной производительности.
#
MaxKeepAliveRequests 100
#
# KeepAliveTimeout: Количество секунд, чтобы ждать следующий запрос от
# того же клиента на том же соединении.
#
KeepAliveTimeout 5
# Эти переменные необходимо установить в /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
#
# HostnameLookups: Записать имена клиентов или только их IP-адреса
# например, www.apache.org (включить) или 204.62.129.132 (выключить).
# По умолчанию выключено, так как в общей сложности было бы лучше, чтобы люди
# осознанно включали эту функцию, поскольку ее активация означает, что
# каждый клиентский запрос приведет как минимум к одному запросу на
# сервер имен.
#
HostnameLookups Off
# ErrorLog: Место расположения файла журнала ошибок.
# Если вы не укажете директиву ErrorLog внутри контейнера <VirtualHost>,
# сообщения об ошибках, относящиеся к этому виртуальному хосту, будут
# записываться сюда. Если вы *определите* файл журнала ошибок для контейнера <VirtualHost>,
# ошибки этого хоста будут записываться туда и не сюда.
#
ErrorLog ${APACHE_LOG_DIR}/error.log
#
# LogLevel: Установите уровень тяжести сообщений, записываемых в error_log.
# Доступные значения: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# Также возможно настроить уровень журнала для конкретных модулей, например
# "LogLevel info ssl:warn"
#
LogLevel warn
# Включить конфигурацию модулей:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
# Включите список портов для прослушивания
Include ports.conf
# Устанавливает модель безопасности по умолчанию для сервера Apache2 HTTPD. Не
# позволяет доступ к корневой файловой системе вне /usr/share и /var/www.
# Первый используется веб-приложениями, упакованными в Debian,
# последний может использоваться для локальных каталогов, обслуживаемых веб-сервером. Если
# ваша система обслуживает контент из подпапки в /srv, вам необходимо разрешить
# доступ здесь или в любом связанном виртуальном хосте.
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
#<Directory /srv/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
IncludeOptional sites-enabled/*.conf
#</Directory>
# AccessFileName: Имя файла, который следует искать в каждом каталоге
# для дополнительных директив конфигурации. См. также директиву AllowOverride
#
AccessFileName .htaccess
#
# Следующие строки предотвращают просмотр файлов .htaccess и .htpasswd
# веб-клиентами.
#
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
#
# Следующие директивы определяют некоторые псевдонимы формата для использования с
# директивой CustomLog.
#
# Эти обозначения отклоняются от определений общего журнала тем, что они используют %O
# (фактические байты, отправленные вместе с заголовками) вместо %b (размер
# запрашиваемого файла), потому что последнее делает невозможным обнаружение частичных
# запросов.
#
# Обратите внимание, что использование %{X-Forwarded-For}i вместо %h не рекомендуется.
# Используйте mod_remoteip вместо этого.
#
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
# Включение директорий игнорирует резервные файлы редакторов и dpkg,
# см. README.Debian для подробностей.
# Включить общие фрагменты заявлений
IncludeOptional conf-enabled/*.conf
# Включите конфигурации виртуальных хостов:
IncludeOptional sites-enabled/*.conf
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
В чем может быть проблема, чего мне не хватает?
Этот пост является продолжением этого поста: https://stackoverflow.com/questions/49085166/virtualhost-apache-on-ubuntu-server-not-working
РЕДАКТИРОВАНИЕ
Я добавил это в свой файл envvars
:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Это исправило одну ошибку, но теперь я все еще получаю эти ошибки:
[Пн Mar 05 17:52:45.978727 2018] [core:warn] [pid 9150] AH00111: Переменная конфигурации ${APACHE_PID_FILE} не определена
[Пн Mar 05 17:52:45.978953 2018] [core:warn] [pid 9150] AH00111: Переменная конфигурации ${APACHE_RUN_USER} не определена
[Пн Mar 05 17:52:45.979024 2018] [core:warn] [pid 9150] AH00111: Переменная конфигурации ${APACHE_RUN_GROUP} не определена
[Пн Mar 05 17:52:45.979109 2018] [core:warn] [pid 9150] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
[Пн Mar 05 17:52:45.982417 2018] [core:warn] [pid 9150:tid 140490114955136] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
[Пн Mar 05 17:52:45.982709 2018] [core:warn] [pid 9150:tid 140490114955136] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
[Пн Mar 05 17:52:45.982771 2018] [core:warn] [pid 9150:tid 140490114955136] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
AH00543: apache2: неправильное имя пользователя ${APACHE_RUN_USER}
Вы также можете установить эти переменные в скрипте запуска как часть переменной окружения пользователей. То же самое с Systemd.
Apache жалуется, что переменные окружения, которые обычно определяются в /etc/apache2/envvars
, не определены. Скрипт запуска для apache2
выполняет этот файл, если он присутствует, чтобы установить APACHE_LOCK_DIR
и его сопутствующие переменные.
Если ваш файл в /etc/apache2
действительно называется envvar
, а не envvars
, то это ваша проблема.
Ответ или решение
Происхождение ошибки: Неопределенные переменные Apache
При запуске команды sudo apache2 -S
в вашей среде вы сталкиваетесь с рядом предупреждений и ошибок, связанных с отсутствующими переменными конфигурации. Ошибки, которые вы видите, как:
[Sun Mar 04 16:17:22.303217 2018] [core:warn] [pid 31405] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Sun Mar 04 16:17:22.303414 2018] [core:warn] [pid 31405] AH00111: Config variable ${APACHE_PID_FILE} is not defined
...
AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}
сигнализируют о том, что переменные конфигурации, такие как ${APACHE_LOCK_DIR}
, ${APACHE_PID_FILE}
, ${APACHE_RUN_USER}
и ${APACHE_RUN_GROUP}
, не определены. Это приводит к тому, что Apache не может корректно инициализировать свои параметры.
Предпосылки определения переменных
В стандартной конфигурации Apache на Debian/Ubuntu, важные переменные окружения для сервера определяются в файле /etc/apache2/envvars
. Этот файл автоматически подключается при запуске сервера Apache и задает необходимые переменные для правильной работы. Убедитесь, что файл имеет правильное название: envvars
(а не, например, envvar
).
Рекомендации по решению проблемы
-
Проверьте наличие файла
envvars
: Убедитесь, что файл существует и имеет правильное название (это должно бытьenvvars
). -
Проверьте содержимое файла
envvars
: Ваш файл должен содержать следующие строки:export APACHE_RUN_USER=www-data export APACHE_RUN_GROUP=www-data export APACHE_PID_FILE=/var/run/apache2/apache2.pid export APACHE_LOCK_DIR=/var/lock/apache2 export APACHE_LOG_DIR=/var/log/apache2
Убедитесь, что пути к файлам корректны и существуют на вашем сервере.
-
Проверьте права доступа: Убедитесь, что у Apache есть необходимые права на чтение этого файла.
-
Перезапуск Apache: После внесенных изменений обязательно перезапустите сервис Apache для применения новых конфигураций:
sudo systemctl restart apache2
-
Проверка статуса сервиса: После перезапуска проверьте статус Apache, чтобы убедиться, что он работает корректно:
sudo systemctl status apache2
-
Дополнительные переменные окружения: Рассмотрите возможность добавления переменных окружения в системные конфигурации или непосредственно в скрипты запуска, если это необходимо для вашей архитектуры.
Заключение
Следуя этим шагам, вы должны справиться с неполадками, связанными с неопределенными переменными в конфигурации Apache. Если проблема сохраняется, проверьте системные журналы для дополнительно информации и уточните настройки вашего окружения. Правильная настройка переменных окружения — ключ к успешной работе вашего веб-сервера Apache.