Переменные конфигурации Apache2 не определены

Вопрос или проблема

Я новичок в Apache2, так что потерпите меня.

Я следовал этому руководству, чтобы настроить HTTPS на сервере Flask.

Каждый раз, когда я выполняю команду apache2, я получаю один и тот же вывод:

[Ср Ноя 28 01:42:32.210442 2018] [core:warn] [pid 1184] AH00111: Переменная конфигурации ${APACHE_PID_FILE} не определена
[Ср Ноя 28 01:42:32.210921 2018] [core:warn] [pid 1184] AH00111: Переменная конфигурации ${APACHE_RUN_USER} не определена
[Ср Ноя 28 01:42:32.211029 2018] [core:warn] [pid 1184] AH00111: Переменная конфигурации ${APACHE_RUN_GROUP} не определена
[Ср Ноя 28 01:42:32.211138 2018] [core:warn] [pid 1184] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
[Ср Ноя 28 01:42:32.219990 2018] [core:warn] [pid 1184:tid 139772922629056] AH00111: Переменная конфигурации ${APACHE_RUN_DIR} не определена
[Ср Ноя 28 01:42:32.220662 2018] [core:warn] [pid 1184:tid 139772922629056] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
[Ср Ноя 28 01:42:32.221009 2018] [core:warn] [pid 1184:tid 139772922629056] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
[Ср Ноя 28 01:42:32.221106 2018] [core:warn] [pid 1184:tid 139772922629056] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
[Ср Ноя 28 01:42:32.221304 2018] [core:warn] [pid 1184:tid 139772922629056] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
[Ср Ноя 28 01:42:32.221421 2018] [core:warn] [pid 1184:tid 139772922629056] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
[Ср Ноя 28 01:42:32.221710 2018] [core:warn] [pid 1184:tid 139772922629056] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
[Ср Ноя 28 01:42:32.221808 2018] [core:warn] [pid 1184:tid 139772922629056] AH00111: Переменная конфигурации ${APACHE_LOG_DIR} не определена
AH00543: apache2: неверное имя пользователя ${APACHE_RUN_USER}

Я пробовал множество других вопросов на StackOverflow, AskUbuntu и ServerFault, и ни один из них не помог. Я застрял и не знаю, что делать. Я отредактирую вопрос, чтобы уточнить, что нужно от других (например, код или что-то из конфигурационного файла)

Любая помощь будет оценена.

ИЗМЕНЕНИЕ: Я зашел на незащищенный (не HTTPS) IP адрес и получил стандартную страницу Apache “Это работает!”. Если я перехожу на защищенный (HTTPS) домен, я получаю ошибку 500 Internal Server Error.

ИЗМЕНЕНИЕ2: Вот мой текущий файл VirtualHost:

<VirtualHost *:80>
 ServerName xerix.me
 ServerAlias www.xerix.me
 ServerAdmin [email protected]
 WSGIScriptAlias / /var/www/cf/cf.wsgi
 <Directory /var/www/cf/cf/>
         Order allow,deny
         Allow from all
 </Directory>
 Alias /static /var/www/cf/cf/static
 <Directory /var/www/cf/cf/static/>
         Order allow,deny
         Allow from all
 </Directory>
 ErrorLog ${APACHE_LOG_DIR}/error.log
 LogLevel warn
 CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =xerix.me [OR]
RewriteCond %{SERVER_NAME} =www.xerix.me
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

ИЗМЕНЕНИЕ3:

Ноя 28 01:50:34 xerix systemd[1]: Запуск Apache HTTP Server...
-- Тема: Юнит apache2.service начал запуск
-- Определено: systemd
-- Поддержка: http://www.ubuntu.com/support
-- 
-- Юнит apache2.service начал запуск.
Ноя 28 01:50:34 xerix systemd[1]: Запущен Apache HTTP Server.
-- Тема: Юнит apache2.service завершил запуск
-- Определено: systemd
-- Поддержка: http://www.ubuntu.com/support
-- 
-- Юнит apache2.service завершил запуск.
-- 
-- Результат запуска: РЕЗУЛЬТАТ.

ИЗМЕНЕНИЕ4:

[Ср Ноя 28 02:43:15.319965 2018] [wsgi:error] [pid 2078:tid 139635571181312] [client :40218] Traceback (most recent call last):, referer: https://xerix.me/
[Ср Ноя 28 02:43:15.320002 2018] [wsgi:error] [pid 2078:tid 139635571181312] [client :40218]   Файл "/var/www/cf/cf.wsgi", строка 7, в <module>, referer: https://xerix.me/
[Ср Ноя 28 02:43:15.320215 2018] [wsgi:error] [pid 2078:tid 139635571181312] [client :40218]     from cf import app as application, referer: https://xerix.me/
[Ср Ноя 28 02:43:15.320252 2018] [wsgi:error] [pid 2078:tid 139635571181312] [client :40218] ImportError: не удается импортировать имя app, referer: https://xerix.me/

Спасибо!

Служба должна быть запущена от имени суперпользователя с помощью systemctl в Debian/Ubuntu.

Её также можно запустить (по системе) с помощью /etc/init.d/apache2 (также известная как старая команда service) в Debian/Ubuntu, но лучший способ – использовать systemctl/systemd в наши дни:

$ sudo systemctl start apache2.service

Смотрите страницу man по systemctl для получения дополнительной информации.

Если вы настаиваете на запуске её от имени пользователя без прав суперпользователя, >по меньшей мере< вам нужно сначала загрузить окружение.

Например:

$ source /etc/apache2/envvars
$ apache2 -V | grep -i 'version\|mpm'
Версия сервера: Apache/2.4.29 (Ubuntu)
Сервер MPM:     event

# или в одну строчку:
$ source /etc/apache2/envvars && apache2 -V | grep -i 'version\|mpm'
Версия сервера: Apache/2.4.29 (Ubuntu)
Сервер MPM:     event

Это должно дать вам корректный вывод (показывает версию и рабочий MPM).

Загрузка переменных Apache перед выполнением команды позволяет правильно считывать/записывать/парсить необходимые данные о расположении файлов и директорий Apache.

ПРИМЕЧАНИЕ: Большинство флагов, таких как apache2 -M (список модулей), будут парсить конфигурационный файл Apache и файлы сайтов. Если файл/папка имеет ограничения доступа для суперпользователя, то вы получите ошибку при запуске от пользователя без прав суперпользователя. Вам нужно будет использовать переменные Apache вместе с командой sudo. (-V не парсит конфиги – обычно пользователь работает нормально). Смотрите комментарии и https://serverfault.com/a/416613/92023

ПРИМЕЧАНИЕ: Вы должны запускать как пользователь суперпользователь для веб-службы на портах 80/443. Пожалуйста, обратитесь к этому ответу, чтобы понять, почему.

Запуск в качестве демона/веб-службы (от имени суперпользователя без init скрипта) с помощью команды apache2 также должен сработать, при условии, что текущее рабочее окружение сначала загружается. Я не могу придумать хорошую причину когда-либо это делать. Запуск в качестве фоновой службы с использованием systemctl избегает всего этого.

Ответ или решение

Когда вы создаете сервер с использованием Apache2, столкновение с предупреждениями о недопустимых конфигурационных переменных, такими как ${APACHE_PID_FILE}, ${APACHE_RUN_USER}, ${APACHE_RUN_GROUP}, и ${APACHE_LOG_DIR}, может показаться сбивающим с толку. Эти переменные используются для настройки путей и прав доступа в конфигурации вашего веб-сервера, и если они не определены, это может привести к ошибкам запуска и непредвиденному поведению сервера.

Причины возникновения проблемы

  1. Отсутствие файла envvars: Эти переменные обычно определяются в файле /etc/apache2/envvars. Если файл отсутствует или поврежден, это приведет к уведомлениям об ошибках при запуске Apache.

  2. Некорректная среды запуска: Если Apache запускается не от имени root, и при этом не загружается среда с помощью source /etc/apache2/envvars, переменные не будут определены, и сервер не сможет их использовать.

  3. Ошибки конфигурации: Неправильные ссылки в конфигурационных файлах Apache также могут привести к этой проблеме, особенно если используются определенные переменные без их предварительного определения.

Шаги для устранения проблемы

1. Проверьте и измените файл envvars

Убедитесь, что файл /etc/apache2/envvars существует и корректно настроен. В стандартном виде он может выглядеть следующим образом:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2/apache2.pid
export APACHE_LOG_DIR=/var/log/apache2

Если вы видите, что переменные не определены, добавьте соответствующие строки в файл.

2. Запуск Apache с правильной средой

Если вы пытаетесь запустить сервер как обычный пользователь, убедитесь, что вы загружаете нужные переменные среды. Для этого выполните команду:

source /etc/apache2/envvars

После этого запустите Apache:

apache2ctl start

Однако, лучшим подходом будет запуск Apache с правами суперпользователя по умолчанию:

sudo systemctl start apache2

3. Проверьте вашу конфигурацию VirtualHost

Ваше определение VirtualHost может содержать ошибки. Приведенное в вопросе состояние указывает на возможные проблемы с правами доступа или неправильными путями.

Убедитесь, что пути к файлам и папкам, указанным в вашем конфигурационном файле, существуют и имеют правильные права доступа. Например:

WSGIScriptAlias / /var/www/cf/cf.wsgi
<Directory /var/www/cf/cf/>
    Require all granted
</Directory>

Замените строки, касающиеся прав доступа. Убедитесь, что у Apache есть доступ к указанным каталогам.

4. Проверка наличия ошибок в wsig файле

Если после исправления проблем с переменными переменная app не импортируется, это может указывать на ошибку в вашем файле cf.wsgi. Убедитесь, что функция или объект с именем app правильно объявлена в cf.py.

Заключение

Ошибки, связанные с недоступными переменными конфигурации Apache, могут вызвать значительные затруднения при настройке веб-сервера. Следуя вышеописанным шагам и проверяя вашу конфигурацию, вы сможете устранить большинство проблем, связанных с запуском Apache2. Обязательно изучите документацию Apache и учитывайте советы сообщества, чтобы углубить свои знания и повысить стабильность вашего сервера.

Оцените материал
Добавить комментарий

Капча загружается...