- Вопрос или проблема
- Ответ или решение
- 1. Проверьте правильность конфигурации VirtualHost
- 2. Проверьте порядок загрузки конфигурационных файлов
- 3. Активируйте конфигурации с помощью a2ensite
- 4. Проверьте права на директории и файлы логов
- 5. Проверьте конфигурацию уровня сервера
- 6. Обратите внимание на символические ссылки
- Заключение
Вопрос или проблема
У меня есть следующая конфигурация 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.