Директива ErrorLog в VirtualHost игнорируется

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

У меня есть следующая конфигурация VirtualHost:

<VirtualHost *:80>
    ServerName website.com

    ServerAdmin [email protected]
    DocumentRoot /var/www/html/website/src/public
    <Directory /var/www/html/website/src/public>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/www/html/website/logs/error.log
    CustomLog /var/www/html/website/logs/access.log combined
</VirtualHost>

Недавно я заметил, что ошибки не записываются в error.log. Информация об обращениях записывается в access.log, так что проблема не в разрешениях для папки логов. error.log имеет аналогичные права доступа, что и access.log. Также, если я явно установлю параметр error_log в php.ini на /var/www/html/website/logs/error.log, то ошибки действительно записываются в error.log.

Если я выполню apachectl -S, я получаю следующий вывод:


Конфигурация VirtualHost:
*:80                   website.com (/etc/apache2/sites-enabled/000-default.conf:1)
ServerRoot: "/etc/apache2"
Основной DocumentRoot: "/var/www/html"
Основной ErrorLog: "/var/log/apache2/error.log"
Mutex по умолчанию: dir="/var/run/apache2/" механизм=по умолчанию
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
Пользователь: name="www-data" id=33
Группа: name="www-data" id=33

ErrorLog явно не соответствует тому, что я определил в директиве ErrorLog. Путь, который отображается, указывает на

# ls -la /var/log/apache2/error.log
lrwxrwxrwx 1 www-data www-data 11 Jul  4  2023 /var/log/apache2/error.log -> /dev/stderr

Это объясняет отсутствие логов, но не объясняет, почему директива ErrorLog игнорируется. Как мне это исправить?

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

Ваша проблема с директивой ErrorLog в конфигурации VirtualHost Apache может быть вызвана несколькими факторами. Давайте подробно рассмотрим возможные причины, а также подходящие шаги для их устранения.

1. Проверьте правильность конфигурации VirtualHost

Убедитесь, что ваша конфигурация VirtualHost корректно активирована. В выводе команды apachectl -S видно, что VirtualHost настроен, но важно удостовериться, что данный файл конфигурации правильно загружается.

2. Проверьте порядок загрузки конфигурационных файлов

Порядок загрузки конфигурационных файлов может повлиять на поведение сервера. Когда несколько конфигураций VirtualHost определены, Apache берёт во внимание только первую найденную директиву ErrorLog. Убедитесь, что другие файлы конфигурации не переопределяют вашу настройку. Попробуйте временно отключить (или закомментировать) другие VirtualHost в каталоге /etc/apache2/sites-enabled/.

3. Активируйте конфигурации с помощью a2ensite

Если вы изменили настройки VirtualHost, не забудьте активировать их, включая команду a2ensite. После внесения изменений обязательно перезапустите Apache с помощью:

sudo systemctl restart apache2

или

sudo service apache2 restart

4. Проверьте права на директории и файлы логов

Вы упомянули, что у файлов error.log и access.log аналогичные разрешения. Однако важно проверить, имеет ли пользователь www-data права на запись в папку /var/www/html/website/logs/. Используйте команды:

ls -ld /var/www/html/website/logs

и

ls -la /var/www/html/website/logs/error.log

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

5. Проверьте конфигурацию уровня сервера

Ваша проблема может быть связана с глобальным уровнем настройки сервера. В файле /etc/apache2/apache2.conf или другом глобальном файле конфигурации может быть определена глобальная директива ErrorLog, которая переопределяет настройки VirtualHost. Проверьте, не установлены ли там подобные директивы.

6. Обратите внимание на символические ссылки

Вы указали, что файл /var/log/apache2/error.log является символической ссылкой на /dev/stderr. Это может указывать на использование системного демона, который не обрабатывает ваши локальные настройки логов. В этом случае вам стоит явно указать лог-файл в вашей конфигурации VirtualHost и убедиться, что символическая ссылка не мешает работе.

Заключение

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

Соблюдение всех этих рекомендаций должно помочь вам восстановить функциональность директивы ErrorLog в вашей конфигурации VirtualHost Apache.

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

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