Ошибка 502 Bad Gateway nginx. Как исправить

Эта статья поможет разобраться, почему на сайтах время от времени появляется ошибка 502 Bad Gateway nginx (HTTP Error 502) и как эту проблему решить.

Если вы посетитель

Если вы не можете попасть на сайт из-за ошибки 502, сделать можно не так много:

  • Перезагрузить страницу, сбросив кеш (Ctrl+Shift+R, Ctrl+F5 или Shift+F5). К сожалению, это помогает не так часто, как хотелось бы.
  • Зайти попозже. Через минуту, через полчаса, ночью или рано утром. Скорее всего сервер перегружен. Исправить это вы не сможете, этим должен заняться администратор сайта. Если сайт для вас важный, и у вас есть время, напишите администратору письмо. Чем больше обращений, тем вероятнее, что на проблему обратят внимание и серьезно ей займутся.

Если вы администратор сайта

Если эта ошибка возникает, значит HTTP-запросы от посетителей к вашему сайту идут через так называемый «шлюз», программу-посредник. Например, если на хостинге перед веб-сервером Apache стоит веб-сервер nginx, то nginx будет шлюзом.

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

Если PHP работает в режиме FastCGI, то любой веб-сервер перед ним будет шлюзом.

Почему Apache не смог обработать запрос? Как это исправить?

Скорее всего, если сайт раньше работал, а теперь не открывается, дело не в ошибках конфигурации среды. Причина может быть в нехватке ресурсов сервера, и, следовательно, в невозможности обслужить всех клиентов. В частности, проблема может быть в нехватке оперативной памяти. Или вы можете упираться в какое-то ограничение, например, на количество процессов. Иногда Apache или ваше приложение могут периодически падать/перезапускаться, в эти моменты фронт-серверу тоже ничего не остаётся, кроме как отдавать ошибку 502. Такое может случиться и на VPS, и на shared-хостинге.

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

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

Если у вас VPS

Если PHP работает через FastCGI, то на сервере может не хватать php-cgi процессов в моменты, когда на сайте много посетителей, пришел прожорливый бот, кто-то скачивает ваш сайт целиком или идёт DoS-атака. Веб-серверу нужно бы запустить дополнительные процессы, но памяти под них уже нет. Значит, нужно добавить памяти либо оптимизировать расход доступной

  • Запустите команду top. Посмотрите, есть ли свободная память и запущен ли Apache.
  • Посмотрите логи Apache и nginx (ошибки 502 попадают в него). Есть паразитная активность? Если есть, баньте по ip, настраивайте Fail2ban, подключайте защиту от DdoS.
  • Если получилось ограничить количество запросов к серверу, перезапустите Apache.
  • Если в логах всё нормально, но мало свободной памяти, и есть возможность ее оперативно добавить, попробуйте это сделать. Сейчас у многих провайдеров это делается в биллинге буквально за пару минут.
  • Если же команда top показывает, что свободная память есть, возможно, дело в установленных лимитах на количество php-cgi процессов. Нужно смотреть конфигурационные файлы Apache (httpd.conf), особенно секцию модуля, отвечающего за FastCGI (mod_fascgi или mod_fastcgid), и увеличивать лимиты.

Если дело в нехватке памяти, то в логах будут ошибки OOM (out of memory). Когда ОС очень нужна память, то ядро может попытаться освободить её при помощи механизма OOM killer, просто убивая активные процессы. Например, здесь пришлось пожертвовать Апачем:
Out of memory: kill process 1718 (apache2) score 56789 or a child
Killed process 22504 (apache2)

Другой случай - когда, Apache периодически падает/перезапускается независимо от текущей нагрузки на сайт. В error.log может быть написано:

[core:notice] [pid 5795] AH00052: child pid 5858 exit signal Segmentation fault (11)
[mpm_prefork:notice] [pid 5795] AH00169: caught SIGTERM, shutting down

Если это происходит со строгой периодичностью, то нужно поискать связь с другими процессами с похожим расписанием. Например, со службой мониторинга или задачами в кроне.

Смотрите также

Комментарии

млин... непонятно.. объясните популярно, как исправить эту проблему

В большинстве случаев нужно просто ждать, когда нагрузка на сервер упадет или администратор сервера решит проблему.

В большинстве случаев достаточно перезагрузить Апач, но если это не помогает, то проблема с инетом.

А если к серверу подключен 1 человек, а ошибка всё равно появляется,
причем без nginx'a всё работало?

мб, что-нибудь с конфигурацией энджинкса

У меня стоит опера и если выдает эту ошибку , просто включаю Опера-Турбо и все отлично грузится -)))

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

У меня была такая проблема, просто у меня слишком много мегабайт информации загружалось на главной странице, до 100 мб. и стала вылазить такая ошибка, ужал картинки, всё пошло нормально

М-да,никто меня не любит гляжу!

а это могут быть это ДДос атаки?

Да, такое бывает и при атаках.

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

А где копать, если имеется выделенный сервер, на нем куча своих сайтов, а 502 выдает только один из них?

Анализировать логи.

Я простой пользователь. Не является ли появление ошибки 502 - признаком индивидуального бана? Как вообще определить наличие бана, если никаких сообщений об оном не было

Если бан, то скорее будет 503

Как вариант - это так же может происходить из-за "Атаки ДДОС". Сегодня несколько раз натыкался на сайты, в которых присутствовали следующие строки:

"""2 Дня подряд сайт подвержен крупной Атаке ДДОС!
Атака на сайт может производиться с разными мотивами, но цель одна – вывести наш с вами сайт из нормального рабочего состояния .
Ведутся на данный момент работы по восстановлению работоспособности ресурса.
Нежайше просим нас понять и ... простить!
Возможна замедленная загрузка страниц, если страница не загрузилась, обновите!"""

Поставил для тестов WordPress и столкнулся такой проблемой:

WP версий 3.3 и 3.4
Nginx 1.2.2
Apache2 2.2.22
Ubuntu Server 11.04 64
MYSQL 5.1.63
PHP 5.3.5

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

В момент ошибки, в логи заносится

[Sat Jul 07 21:27:09 2012] [notice] child pid 2634 exit signal Segmentation fault (11)

На том-же хостинге без проблема работает куча сайтов, в том числе и на тяжелом IPB 3.2!

Текущая загрузка сервера 0.03
Доступная память сервера 1434 MB

Что забавно, если включить в Опере турбо-режим, то в админку входт на ура!

Чаще всего это локальная серверная ошибка и она пройдёт со временем или её устранит сам провайдер или хостер. Такое периодически бывает.

Статья дает полную картину, инфа 100%

1. Либо настроен веб сервер криво
2. Либо меняйте хостинг/машину
:)

p.s. если висите на хостинге, меняйте хостинг либо тариф план.
другими словами - не хватает ресурсов обработать все запросы