Вопрос или проблема
Я новичок в 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}
, может показаться сбивающим с толку. Эти переменные используются для настройки путей и прав доступа в конфигурации вашего веб-сервера, и если они не определены, это может привести к ошибкам запуска и непредвиденному поведению сервера.
Причины возникновения проблемы
-
Отсутствие файла
envvars
: Эти переменные обычно определяются в файле/etc/apache2/envvars
. Если файл отсутствует или поврежден, это приведет к уведомлениям об ошибках при запуске Apache. -
Некорректная среды запуска: Если Apache запускается не от имени root, и при этом не загружается среда с помощью
source /etc/apache2/envvars
, переменные не будут определены, и сервер не сможет их использовать. -
Ошибки конфигурации: Неправильные ссылки в конфигурационных файлах 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 и учитывайте советы сообщества, чтобы углубить свои знания и повысить стабильность вашего сервера.