Ошибка 502

Материал из DiPHOST.Ru wiki system

Версия от 09:53, 26 июля 2012; Schors (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

На нашем хостинге HTTP-запросы к сайтам идут через nginx, который пропускает их через себя к пользовательским веб-серверам apache (подробнее можно узнать в нашей статье Веб-система).

502-ая ошибка означает, что запрос к сайту прошел nginx, он попытался передать его дальше и не смог передать или получить ответ. В результате nginx отдает в ответ на запрос ошибку.

Существует целый ряд не связанных между собой ситуаций, когда возможно возникновение такой ошибки.

Нехватка ресурсов

Самая популярная ситуация на виртуальном хостинге.

У веб-сервера apache количество одновременных обработчиков фиксировано конфигурацией сервера. Если все обработчики заняты, то новые запросы не принимаются и становятся в очередь до истечения предела времени ожидания. Если предел времени ожидания истёк (обычно это одна - полторы минуты), то nginx выдаёт ошибку 502. Очередь запросов тоже имеет предел, который составляет 128 запросов на каждый веб-сервер apache. Если очередь заполнена, то новый запрос не принимается, nginx выдаёт ошибку 502 и закрывает соединение (более подробно описано в статье Веб-система).

Этот вид ошибки прекрасно диагностируется попыткой обратиться к статическому содержимому сайта - картинке или файлу robots.txt, например. Также, косвенным подтверждением может быть то, что неработоспособными становятся все сайты аккаунта выбранного типа (поскольку они обслуживаются одним веб-сервером).

Возможные причины нехватки ресурсов:

  • если программное обеспечение сайта обращается к внешним ресурсам (например, скрипт сайта хочет получить значение некоего счётчика на другом сайте) без установки предела времени ожидания, то неполадки в сети или на внешнем ресурсе почти мгновенно приводят к ошибке 502;
  • на тарифе TINCO и ознакомительных WSGI-сайтах тарифа PARMA, где предусмотрен всего один обработчик, обращение из программного обеспечения сайта самого к себе (например, скрипт главной страницы хочет получить информацию из форума этого же сайта, обращаясь к нему) приводит к ошибке 502;
  • в случае загрузки файлов большого объёма этим занимается обработчик долгое время, это может привести к к эффекту торможения, а зачастую и ошибке 502;
  • возможны проблемы на сервере, в зоне ответственности хостера (нас, т.е.), приводящие к очень медленной работе веб-серверов apache, которые в итоге не успевают обработать поток запросов.

Если на серверах нет аварийной ситуации, то методика устранения проблемы такова:

  • выделить предполагаемые нагруженные php-сайты на отдельные тарифы PARMA;
  • выделить предполагаемые нагруженные WSGI-сайты на отдельные тарифы CALMA;
  • сократить вплоть до полного отказа интерактивные соединения с внешними ресурсами;
  • выставить пределы времени соединений с внешними ресурсами.

Если нет явной логической ошибки в скриптах сайта, то обычно ситуация разрешается просто выделением сайтов на отдельные основные тарифы для выбранной технологии (PARMA для php, CALMA для python). Подобранные нами параметры и состояния серверов позволяют выдерживать достаточно посещаемые и ресурсоёмкие сайты при условии, что они не мешают друг другу.

Несоблюдение стандартов

Некоторые популярные программы написаны без соблюдения стандартов. При этом nginx служит неким фильтром "битых" запросов, чтобы избавить от обработки их внутренний уровень веб-системы. При невозможности передать запрос к apache, nginx выдаёт ошибку 502. Например, магазин PrestaShop хранит много информации в так называемых cookie, которые передаются в заголовках HTTP-запросов. По стандарту, они не могут превышать 4Kb. Однако PrestaShop игнорирует это ограничение. При попытке передать запрос с размером заголовков более 4Kb к apache, nginx выдаёт ошибку 502. Ошибка обнаруживается только просмотром специальных журналов, поскольку запрос не дошёл до apache, и устраняется установкой на страх и риск клиента конфигурации для сайта с "поправкой" на предел размера заголовков.

Ошибки PHP

Возможны ошибки различных расширений PHP, не связанные с синтаксисом языка или логикой работы расширений, когда обработчик просто "ломается" и ничего не отдаёт наружу. Для nginx это выглядит как внезапное закрытие соединения с apache и он считает это ошибкой. Выявить именно этот тип ошибки можно методом исключения - если статическое содержимое (картинки, файл robots.txt) нормально открывается, а обращение к скрипту выдаёт 502-ую ошибку - это скорее всего описанный случай.

Источник — «https://wiki.diphost.ru/Error502»

Категория:

Личные инструменты
© 2006 — ООО «Дремучий лес»
Служба техподдержки: support@diphost.ru
Тексты этого сайта являются полностью оригинальными
или оригинальными компиляциями ООО «Дремучий Лес».
Распространяются по лицензии WTFPL
Отзывы о хостинге diphost.ru Отзывы на hostobzor.ru