Рекомендации по исправлению ошибок вэб-сервера

При доступе к веб-серверу или приложению на каждый 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 Bad Request

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

Вот несколько примеров того, когда может возникнуть ошибка 400 Bad Request: - Файл cookie пользователя, связанный с сайтом, поврежден. Очистка кеша и файлов cookie браузера может решить эту проблему. - Неверный запрос из-за неисправного браузера - Неверный запрос из-за человеческой ошибки при формировании HTTP-запросов вручную (например, curlнеправильное использование)

401 Unauthorized

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

403 Forbidden

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

Разрешения для файлов

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

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

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

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 могут возникать в самых разных ситуациях. Если пользователь неожиданно получает сообщение об ошибке 404 Not Found, вот несколько вопросов, которые следует задать при устранении неполадок:

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

500 Internal Server Error

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

502 Bad Gateway

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

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

503 Service Unavailable

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

504 Gateway Timeout

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

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

Заключение

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

Перевод статьи на DO