Как устранить неполадки общих кодов ошибок HTTP

Вступление

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

  • 1xx: информационный

  • 2xx: успех

  • 3xx: перенаправление

  • 4xx: ошибка клиента

  • 5xx: ошибка сервера

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

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

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

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

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

  • При использовании веб-браузера для тестирования веб-сервера обновите браузер после внесения изменений на сервере

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

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

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

[[400-bad-request]] === ошибка 400, неверный запрос

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

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

  • Файл cookie пользователя, связанный с сайтом, поврежден. Очистка кеша браузера и файлов cookie может решить эту проблему

  • Неправильный запрос из-за неисправного браузера

  • Неверно сформированный запрос из-за человеческой ошибки при формировании HTTP-запросов вручную (например, неправильно использовать + curl +)

[[401-unauthorized]] === 401 Несанкционированный

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

Пример сценария, в котором будет возвращена несанкционированная ошибка 401, - это если пользователь пытается получить доступ к ресурсу, защищенному HTTP-аутентификацией, как в https://www.digitalocean.com/community/tutorials/how-to-set-up. -http-authentication-with-nginx-on-ubuntu-12-10 [это руководство по Nginx]. В этом случае пользователь будет получать код ответа 401 до тех пор, пока он не предоставит действительное имя пользователя и пароль (тот, который существует в файле + .htpasswd +) для веб-сервера.

[[403-forbidden]] === 403 Запрещено

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

Файловые права

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

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

  • Пользователь пытается получить доступ к файлу индекса веб-сервера из + http: // example.com / index.html +

  • Рабочий процесс веб-сервера принадлежит пользователю + www-data

  • На сервере индексный файл находится по адресу + / usr / share / nginx / html / index.html

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

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-not-found]] === 404 Не Найдено

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

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

  • Есть ли в ссылке, которая направляла пользователя на ваш ресурс сервера, опечатка?

  • Пользователь ввел неправильный URL?

  • Существует ли файл в правильном месте на сервере? Был ли ресурс перемещен или удален на сервере?

  • Есть ли в конфигурации сервера правильное корневое местоположение документа?

  • Имеет ли пользователь, которому принадлежит рабочий процесс веб-сервера, привилегии для перехода в каталог, в котором находится запрошенный файл? (Подсказка: для доступа к каталогам требуются разрешения на чтение и выполнение)

  • Доступ к ресурсу является символической ссылкой? Если это так, убедитесь, что веб-сервер настроен на использование символических ссылок

[[500-internal-server-error]] === 500 - внутренняя ошибка сервера

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

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

[[502-bad-gateway]] === 502 Неверный шлюз

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

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

  • Внутренние серверы (на которые перенаправляются HTTP-запросы) исправны

  • Обратный прокси-сервер настроен правильно, с указанием соответствующих бэкэндов

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

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

[[503-service-unavailable]] === сервис 503 недоступен

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

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

[[504-gateway-timeout]] === Ошибка 504 Время ответа сервера истекло

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

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

  • Сетевое соединение между серверами плохое

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

  • Время ожидания шлюза или прокси-сервера слишком мало

Заключение

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

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

Related