Как отладить ошибку 404 в Apache?

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

Каждый раз, когда я настраиваю новую установку 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 может стать менее болезненным процессом, если следовать описанным шагам. Увеличение уровня логгирования, проверка конфигураций виртуальных хостов и использование отдельных логов поможет вам быстрее находить и исправлять проблемы. С применением этих методов вы обязательно сможете устранить возникшие ошибки и наладить стабильную работу вашего веб-сервера.

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

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