Вопрос или проблема
Каждый раз, когда я настраиваю новую установку httpd
, я сталкиваюсь с проблемами начальной конфигурации VirtualHost
/ mod_proxy_fcgi
/ и так далее.
Когда я настраиваю свои виртуальные хосты и получаю ошибку 404, я всегда обращаюсь к журналам, и нахожу только:
-
access_log
:::1 - - [13/Sep/2019:21:33:57 +0200] "GET /phpinfo.php HTTP/1.1" 404 196
То есть, всего лишь то, что произошла ошибка
404
. -
error_log
:... [Fri Sep 13 21:33:55.009444 2019] [mpm_prefork:notice] [pid 73200] AH00163: Apache/2.4.41 (Unix) настроен -- возобновление нормальной работы [Fri Sep 13 21:33:55.011901 2019] [core:notice] [pid 73200] AH00094: Командная строка: '/usr/local/opt/httpd/bin/httpd -D FOREGROUND'
То есть, ничего.
Поэтому я всегда делаю одно и то же: пробую и ошибаюсь.
Существует ли способ сказать Apache регистрировать каждый шаг, который он пытался сделать перед тем, как сделать вывод о том, что это ошибка 404?
Что-то вроде:
- нет совпадения для VirtualHost x
- нет совпадения для VirtualHost y
- совпадение для VirtualHost z, файл не найден: /path/to/file
То есть, что-то полезное?
Первое, что нужно проверить, это вывод apachectl -S
. Он показывает, какой IP слушает на каком порту и для какого виртуального хоста. И он также показывает файл и номер строки, которые его настроили.
Затем вы можете добавить директиву GlobalLog для всех виртуальных хостов и увеличить уровень логирования, пока отлаживаете, сохраняя свои стандартные файлы CustomLog.
Например, создайте файл /etc/apache2/conf-available/temp_debug.conf
:
LogLevel trace4
GlobalLog ${APACHE_LOG_DIR}/debug.log "%v:%p %h %l %u %t \"%r\" %>s %O file=%f"
# http://httpd.apache.org/docs/current/mod/mod_log_config.html#formats
# %v Каноническое имя сервера, обрабатывающего запрос.
# %f Имя файла.
Активируйте его с помощью
sudo a2enconf temp_debug && sudo apachectl graceful
Когда закончите, отключите дополнительное логирование с помощью
sudo a2disconf temp_debug && sudo apachectl graceful
Информация трассировки будет отправлена в ваш ErrorLog, также указывая, какой уровень трассировки был необходим для записи в журнал.
Да. Существуют возможные подходы для решения вашей проблемы. На мой взгляд, наилучший способ – настроить разные директивы ErrorLog
и CustomLog
для каждого виртуального хоста, сохраняя в независимые файлы. Другой способ – настроить свой лог, вставив виртуальный хост, используя маски LogFormat (%v, например, для регистрации соответствующего виртуального хоста). Проблема с этим методом в том, что если вы используете какой-то анализатор логов Apache, вы можете столкнуться с проблемой, или вам придется настроить его под новый шаблон.
С наилучшими пожеланиями.
@mivk ответ полезен, но не работает в 2024 году, по крайней мере в моей среде EL9.
Используйте apachectl status
, чтобы увидеть статус сервера и добавьте файл конфигурации отладки в /etc/httpd/conf.d/temp_debug.conf
:
LogLevel trace4
GlobalLog "logs/debug.log" "%v:%p %h %l %u %t \"%r\" %>s %O file=%f"
# Относительные имена файлов ведут отсюда ServerRoot, в противном случае используйте абсолютный путь
# http://httpd.apache.org/docs/current/mod/mod_log_config.html#formats
# %v Каноническое имя сервера, обрабатывающего запрос.
# %f Имя файла.
Этот файл добавит файл журнала для всех виртуальных хостов (GlobalLog) и установит уровень журнала для всех ваших файлов журнала на trace4. Теперь проверьте, что в конфигурационных файлах нет ошибок с помощью apachectl configtest
и перезапустите сервер, чтобы использовать новую конфигурацию systemctl restart httpd
.
Ответ или решение
Как отладить ошибку 404 в Apache: Полное руководство
Ошибка 404 в веб-сервере Apache часто вызывает затруднения при настройке, особенно при работе с виртуальными хостами и модулями, такими как mod_proxy_fcgi
. Неправильная конфигурация может привести к неясным сообщениям об ошибках в логах, что делает процесс отладки сложным. В данной статье мы рассмотрим несколько шагов и методов, которые помогут вам более эффективно отладить ошибку 404.
1. Проверка текущей конфигурации
Первым делом выполните команду:
apachectl -S
Эта команда покажет, какие IP-адреса слушают какие порты и для каких виртуальных хостов настроен Apache. Вы также увидите строки конфигурации, что может помочь выяснить, почему не удается получить доступ к нужному ресурсу. Убедитесь, что виртуальные хосты настроены корректно и что все пути указаны верно.
2. Увеличение уровня логгирования
Чтобы получить более детальную информацию о работе Apache, вы можете увеличить уровень логгирования. Это позволит увидеть, какие шаги выполняет сервер перед тем, как решить, что ресурс не найден. Для этого создайте файл конфигурации:
/etc/apache2/conf-available/temp_debug.conf
Содержимое файла может быть следующим:
LogLevel trace4
GlobalLog ${APACHE_LOG_DIR}/debug.log "%v:%p %h %l %u %t \"%r\" %>s %O file=%f"
Команды, которые вам нужно выполнить, чтобы активировать эту конфигурацию:
sudo a2enconf temp_debug && sudo apachectl graceful
Такой уровень логирования обеспечит запись информации о каждом запросе и его обработке. После завершения отладки не забудьте отключить дополнительное логирование той же командой:
sudo a2disconf temp_debug && sudo apachectl graceful
3. Настройка отдельных логов для виртуальных хостов
Для повышения удобства пользования и анализа данных рекомендуется настраивать отдельные журналы ошибок и запросов для каждого виртуального хоста. В секции каждого виртуального хоста вы можете указать:
ErrorLog ${APACHE_LOG_DIR}/error_log_vhost1.log
CustomLog ${APACHE_LOG_DIR}/access_log_vhost1.log combined
При таком подходе вы сможете легко определить, какой хост вызывает ошибку 404, и какие запросы приводят к ней.
4. Проверка разрешений и существования файлов
Одной из распространенных причин появления ошибки 404 является неправильная установка разрешений на файлы и директории. Убедитесь, что файлы, доступ к которым вы хотите получить, существуют и имеют корректные разрешения. Например:
ls -l /path/to/your/document/root/
Также проверьте, правильно ли настроена директория в конфигурации виртуальных хостов.
5. Дополнительные инструменты и команды
-
Проверка конфигурации Apache: Перед перезапуском сервера убедитесь, что в конфигурации нет ошибок, выполнив:
apachectl configtest
-
Статус сервера: Для проверки статуса Apache выполните
apachectl status
Эти команды помогут вам убедиться в отсутствии более серьезных проблем в конфигурации.
Заключение
Отладка ошибки 404 в Apache может стать менее болезненным процессом, если следовать описанным шагам. Увеличение уровня логгирования, проверка конфигураций виртуальных хостов и использование отдельных логов поможет вам быстрее находить и исправлять проблемы. С применением этих методов вы обязательно сможете устранить возникшие ошибки и наладить стабильную работу вашего веб-сервера.