Поиск по сайту:

Как устранить распространенные коды ошибок HTTP


Введение

При доступе к веб-серверу или приложению каждый HTTP-запрос, полученный сервером, отвечает кодом состояния HTTP. Коды состояния HTTP представляют собой трехзначные коды и сгруппированы в пять разных классов. Класс кода состояния можно определить по его первой цифре:

  • 1xx: информационный
  • 2xx: успех
  • 3xx: перенаправление
  • 4xx: ошибка клиента
  • 5xx: ошибка сервера

В этом руководстве основное внимание уделяется выявлению и устранению наиболее часто встречающихся кодов ошибок HTTP, т. е. кодов состояния 4xx и 5xx, с точки зрения системного администратора. Существует множество ситуаций, которые могут привести к тому, что веб-сервер ответит на запрос с определенным кодом ошибки — мы рассмотрим общие возможные причины и решения.

Обзор ошибок клиента и сервера

Ошибки клиента или коды состояния HTTP от 400 до 499 являются результатом HTTP-запросов, отправленных пользовательским клиентом (т. е. веб-браузером или другим HTTP-клиентом). Несмотря на то, что эти типы ошибок связаны с клиентом, часто полезно знать, с каким кодом ошибки сталкивается пользователь, чтобы определить, можно ли устранить потенциальную проблему с помощью конфигурации сервера.

Ошибки сервера или коды состояния HTTP от 500 до 599 возвращаются веб-сервером, когда он знает, что произошла ошибка, или иным образом не может обработать запрос.

Общие советы по устранению неполадок

  • При использовании веб-браузера для тестирования веб-сервера обновите браузер после внесения изменений в сервер.
  • Дополнительные сведения о том, как сервер обрабатывает запросы, см. в журналах сервера. Например, такие веб-серверы, как Apache или Nginx, создают два файла с именами access.log и error.log, которые можно сканировать для получения соответствующей информации
  • Помните, что определения кодов состояния HTTP являются частью стандарта, реализуемого приложением, обслуживающим запросы. Это означает, что фактический возвращаемый код состояния зависит от того, как серверное программное обеспечение обрабатывает конкретную ошибку. Как правило, это руководство указывает вам правильное направление.

Теперь, когда у вас есть общее представление о кодах состояния HTTP, мы рассмотрим часто встречающиеся ошибки.

ошибка 400, неверный запрос

Код состояния 400 или ошибка Bad Request означает, что HTTP-запрос, отправленный на сервер, имеет недопустимый синтаксис.

Вот несколько примеров, когда может возникнуть ошибка 400 Bad Request:

  • Файл cookie пользователя, связанный с сайтом, поврежден. Эту проблему может решить очистка кеша браузера и файлов cookie.
  • Неверный формат запроса из-за неисправного браузера
  • Неверный формат запроса из-за человеческой ошибки при ручном формировании HTTP-запросов (например, неправильное использование curl)

401 Неавторизованный

Код состояния 401 или ошибка Unauthorized означает, что пользователь, пытающийся получить доступ к ресурсу, не прошел проверку подлинности или прошел проверку подлинности неправильно. Это означает, что пользователь должен предоставить учетные данные, чтобы иметь возможность просматривать защищенный ресурс.

Пример сценария, в котором будет возвращена ошибка 401 Unauthorized, — это попытка пользователя получить доступ к ресурсу, защищенному HTTP-аутентификацией, как в этом руководстве по Nginx. В этом случае пользователь будет получать код ответа 401 до тех пор, пока не предоставит веб-серверу действительное имя пользователя и пароль (тот, который существует в файле .htpasswd).

403 Запрещено

Код состояния 403 или ошибка Forbidden означает, что пользователь сделал допустимый запрос, но сервер отказывается его обслуживать из-за отсутствия разрешения на доступ к запрошенному ресурсу. Если вы неожиданно столкнулись с ошибкой 403, здесь описаны несколько типичных причин.

Права доступа к файлам

Ошибки 403 обычно возникают, когда пользователь, запускающий процесс веб-сервера, не имеет достаточных прав для чтения файла, к которому осуществляется доступ.

Чтобы привести пример устранения ошибки 403, предположим следующую ситуацию:

  • Пользователь пытается получить доступ к индексному файлу веб-сервера с http://example.com/index.html
  • Рабочий процесс веб-сервера принадлежит пользователю www-data
  • На сервере индексный файл находится по адресу /usr/share/nginx/html/index.html

Если пользователь получает ошибку 403 Forbidden, убедитесь, что у пользователя www-data достаточно прав для чтения файла. Как правило, это означает, что другие разрешения файла должны быть установлены на чтение. Есть несколько способов убедиться в этом, но в этом случае сработает следующая команда:

  1. sudo chmod o=r /usr/share/nginx/html/index.html

.htaccess

Другой потенциальной причиной ошибки 403, часто преднамеренной, является использование файла .htaccess. Файл .htaccess можно использовать, например, для запрета доступа определенных ресурсов к определенным IP-адресам или диапазонам.

Если пользователь неожиданно получает ошибку 403 Forbidden, убедитесь, что это не вызвано вашими настройками .htaccess.

Индексный файл не существует

Если пользователь пытается получить доступ к каталогу, в котором нет индексного файла по умолчанию, и списки каталогов не включены, веб-сервер вернет ошибку 403 Forbidden. Например, если пользователь пытается получить доступ к http://example.com/emptydir/, а в каталоге emptydir на сервере нет индексного файла, Статус 403 будет возвращен.

Если вы хотите, чтобы списки каталогов были включены, вы можете сделать это в конфигурации вашего веб-сервера.

404 Не Найдено

Код состояния 404 или ошибка Not Found означает, что пользователь может связаться с сервером, но не может найти запрошенный файл или ресурс.

Ошибки 404 могут возникать в самых разных ситуациях. Если пользователь неожиданно получает сообщение об ошибке 404 Not Found, вот несколько вопросов, которые следует задать при устранении неполадок:

  • Есть ли в ссылке, направляющей пользователя на ресурс вашего сервера, опечатка?
  • Ввел ли пользователь неверный URL-адрес?
  • Существует ли файл в правильном месте на сервере? Ресурс был перемещен или удален на сервере?
  • Указано ли в конфигурации сервера правильное расположение корня документа?
  • Есть ли у пользователя, которому принадлежит рабочий процесс веб-сервера, права доступа к каталогу, в котором находится запрошенный файл? (Подсказка: для доступа к каталогам требуются права на чтение и выполнение)
  • Является ли доступ к ресурсу символической ссылкой? Если это так, убедитесь, что веб-сервер настроен на переход по символическим ссылкам.

500 - внутренняя ошибка сервера

Код состояния 500 или Внутренняя ошибка сервера означает, что сервер не может обработать запрос по неизвестной причине. Иногда этот код появляется, когда более уместны более конкретные ошибки 5xx.

Наиболее распространенной причиной этой ошибки является неправильная конфигурация сервера (например, неверный формат файла .htaccess) или отсутствие пакетов (например, попытка выполнить файл PHP без установленного должным образом PHP).

502 Неверный шлюз

Код состояния 502 или ошибка Bad Gateway означает, что сервер является шлюзом или прокси-сервером и не получает действительного ответа от внутренних серверов, которые должны фактически выполнить запрос.

Если рассматриваемый сервер является обратным прокси-сервером, например балансировщиком нагрузки, необходимо проверить несколько вещей:

  • Внутренние серверы (на которые перенаправляются HTTP-запросы) исправны
  • Обратный прокси-сервер настроен правильно, и указаны правильные серверные части.
  • Сетевое соединение между внутренними серверами и обратным прокси-сервером исправно. Если серверы могут обмениваться данными через другие порты, убедитесь, что брандмауэр разрешает трафик между ними.
  • Если ваше веб-приложение настроено на прослушивание сокета, убедитесь, что сокет существует в правильном месте и имеет соответствующие разрешения.

503 Сервис недоступен

Код состояния 503 или ошибка Сервис недоступен означает, что сервер перегружен или находится на обслуживании. Эта ошибка означает, что в какой-то момент служба должна стать доступной.

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

Ошибка 504 Время ответа сервера истекло

Код состояния 504 или ошибка Gateway Timeout означает, что сервер является шлюзом или прокси-сервером и не получает ответа от внутренних серверов в течение разрешенного периода времени.

Обычно это происходит в следующих ситуациях:

  • Сетевое соединение между серверами плохое
  • Внутренний сервер, выполняющий запрос, работает слишком медленно из-за низкой производительности.
  • Время ожидания шлюза или прокси-сервера слишком мало.

Заключение

Теперь, когда вы знакомы с наиболее распространенными кодами ошибок HTTP и общими решениями для этих кодов, у вас должна быть хорошая основа для устранения неполадок с вашими веб-серверами или приложениями.

Если вы столкнулись с какими-либо кодами ошибок, которые не были упомянуты в этом руководстве, или если вы знаете другие вероятные решения для тех, которые были описаны, не стесняйтесь обсуждать их в комментариях.