Перейти к основному содержимому

Руководства / Починка: руководства по ошибкам, которые встречаются на практике

Ошибка Cloudflare 520: что означает и как исправить

Ошибка Cloudflare 520 означает, что Cloudflare подключился к вашему источнику (origin), но получил в ответ что-то пустое, нераспознаваемое или слишком сломанное, чтобы передать это посетителю. Cloudflare использует код ошибки 520 как универсальный: от origin что-то пришло, но это не укладывается в правила нормального HTTP-ответа.

Что означает ошибка 520

Cloudflare стоит между посетителем и вашим веб-сервером как обратный прокси. При обычном запросе он открывает TCP-соединение с вашим origin, отправляет запрос и передает дальше тот HTTP-ответ, который придет. Ошибка 520 срабатывает, когда этот последний шаг проваливается: TCP-соединение устанавливается успешно, но следующие за ним байты не разбираются как валидный HTTP-ответ, либо не приходит вообще никаких байтов до того, как соединение закрывается.

Это ставит 520 в отдельную категорию среди прочих кодов 5xx у Cloudflare. Ошибка 521 означает, что origin сразу отказал в соединении. Ошибка 522 означает, что попытка соединения истекла по таймауту. Ошибка 520 означает, что origin что-то ответил, но Cloudflare не смог разобрать это или передать дальше.

Как проявляется ошибка 520

В браузере Cloudflare показывает собственную страницу ошибки: "Error 520: web server returned an unknown error" вместе с Ray ID, который понадобится, если вы обратитесь в поддержку Cloudflare. Обычный запрос curl к домену покажет тот же код состояния:

curl -I https://example.com
HTTP/2 520

На стороне Cloudflare вкладки Security или Analytics в панели управления покажут всплеск ответов 5xx, а аккаунты Enterprise с доступом к Logpull или Logpush могут получить конкретный edge-дата-центр и Ray ID для каждого неудачного запроса. Впрочем, ничего из этого не говорит, что именно отправил origin, так что следующее место для проверки - ваш собственный сервер.

На origin проверьте логи веб-сервера и приложения за то же время, когда происходили сбои. Ищите перезапуск процесса, segmentation fault, уничтожение процесса из-за нехватки памяти (out-of-memory kill) в системном логе (dmesg или journalctl -k), либо ошибку приложения, оборвавшую запрос посреди ответа. Если логи приложения не показывают вообще ничего необычного, скорее всего проблема в ответе, который технически завершился, но нарушил какое-то правило HTTP - например, слишком большой заголовок.

Что вызывает ошибку 520

  • Процесс origin упал или перезапустился в процессе обработки запроса. Соединение закрывается до того, как ушел полный ответ. Это самая частая причина.
  • Origin сбросил TCP-соединение (RST) вместо того, чтобы закрыть его штатно. Так часто происходит с серверами приложений под нехваткой памяти или при истечении таймаута воркера.
  • Заголовки ответа превышают лимит Cloudflare в 16 КБ. Крупный заголовок set-cookie, стопка отладочных заголовков или подробные заголовки CORS могут вытолкнуть общий объем за то, что готов принять Cloudflare.
  • Cookie или объединенный заголовок cookie слишком большой. Данные сессии, трекинговые cookie или неправильно настроенное хранилище cookie со временем могут разрастись за пределы лимитов браузера и прокси.
  • Отсутствующая или некорректная стартовая строка статуса. Некоторые фреймворки возвращают сырую строку ошибки вместо нормального HTTP-ответа, когда необработанное исключение доходит до уровня веб-сервера.
  • Origin вернул не-HTTP данные на HTTP(S)-порту. Это случается после неправильно настроенного обратного прокси, неверного сопоставления портов, либо когда какой-то сервис занимает порт раньше настоящего веб-сервера.
  • Защитное устройство или WAF перед origin оборвал соединение посреди ответа. Некоторые локальные WAF и балансировщики нагрузки завершают соединения, сработавшие на какое-то правило, что со стороны Cloudflare выглядит абсолютно так же, как сбой.

Как понять, кто виноват

Поскольку Cloudflare действительно получил ответ от origin, ошибка 520 - сильный сигнал, что проблема на стороне origin, а не в сети самого Cloudflare, в отличие от ошибок 521 или 522, где проваливается само соединение. Открытым обычно остается вопрос, затрагивает ли это всех посетителей или только часть.

Быстрее всего это разделить, запустив HTTP-проверку из нескольких мест одновременно. Если проверка публичного домена проваливается из всех точек одновременно с жалобами пользователей, origin действительно упал или падает для всех, а не только для одного edge-дата-центра. Если сбои случаются только время от времени или только из отдельных регионов, возможно, origin перегружен нагрузкой именно из этого региона, либо задействован слой кэширования или балансировки, присутствующий только в части вашей инфраструктуры. HTTP-проверка HostTracker запускается из контрольных точек в нескольких странах и сообщает результат каждой отдельно - деталь, которую единственный curl с вашего рабочего места дать не может.

Вы также можете полностью изолировать origin от Cloudflare, обратившись к нему напрямую с заголовком Host домена, минуя edge-сеть, так что любая ошибка, которую вы увидите, будет несомненно принадлежать origin:

curl -v -H "Host: example.com" https://ORIGIN_IP/

Замените ORIGIN_IP на реальный IP-адрес вашего сервера. Если этот прямой запрос тоже падает или возвращает тот же сломанный ответ, неисправность на origin подтверждена.

Как исправить ошибку 520

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

  1. Перезагрузите страницу через минуту-другую. Многие ошибки 520 вызваны кратковременным сбоем или перезапуском, из которого собственный супервизор процессов сайта восстанавливается автоматически.
  2. Попробуйте приватное или инкогнито-окно либо другую сеть. Это исключает устаревший локальный кэш или неисправное расширение браузера, хотя причиной 520 крайне редко бывает что-то на вашей стороне.
  3. Проверьте, публикует ли сайт собственную статус-страницу, если она есть, - на предмет известного сбоя.
  4. Настроить у себя для исправления 520 нечего. Эту ошибку генерирует собственный сервер сайта, а не ваш браузер, ваш провайдер или ваш DNS-резолвер.

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

  1. Проверьте логи веб-сервера и приложения на origin за точное время сбоев, отслеживая падение, необработанное исключение или перезапуск воркера.
  2. Обойдите Cloudflare и обратитесь к origin напрямую с заголовком Host (как показано выше), либо используйте опцию Cloudflare "Pause Cloudflare on Site", чтобы подтвердить, что ответ сломан независимо от прокси.
  3. Измерьте размер заголовков ответа и cookie. Один крупный заголовок set-cookie или куча оставленных в продакшене отладочных заголовков могут вытолкнуть общий объем за 16 КБ; уберите лишнее и вынесите крупные данные сессии на сторону сервера.
  4. Проверьте наличие некорректных ответов: обратный прокси или балансировщик, направленный не на тот upstream, приложение, возвращающее обычный текст на HTTP-порту, либо отсутствующую стартовую строку статуса из обработчика ошибок фреймворка по умолчанию.
  5. Проверьте исчерпание ресурсов на origin: лимиты памяти, лимиты пула соединений, либо менеджер процессов (systemd, pm2, пул воркеров Gunicorn или uWSGI), застрявший в цикле перезапуска.
  6. Если между интернетом и сервером вашего приложения стоит WAF, антивирусный прокси или балансировщик нагрузки, проверьте его собственные логи на предмет отброшенных или сброшенных соединений примерно в то же время.

Как это предотвратить

Ошибка 520 обычно сначала проявляется как тикет в поддержку, а не как алерт, потому что на origin необязательно логируется неудачное рукопожатие с edge-узлом Cloudflare так же, как логируется исключение приложения. Внешняя проверка доступности, запускаемая снаружи вашей собственной сети, ловит тот же сбой, который видит посетитель, с той же точки обзора, прежде чем кто-то успеет о нем сообщить. Запуск проверки из нескольких стран также сразу показывает, глобальна ли ошибка 520 или ограничена одним регионом, - а это как раз та деталь, которая определяет, откуда начинать отладку.

Похожие ошибки

Часто задаваемые вопросы

Ошибка 520 - это вина Cloudflare или моя?

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

Означает ли ошибка 520, что весь мой сайт лежит?

Не обязательно. Она означает, что провалился конкретный запрос, который ее вызвал. Если origin падает под нагрузкой, он может отдавать 520 части запросов и нормальные ответы остальным, пока первопричина не будет устранена.

Могу ли я исправить ошибку 520 только из панели управления Cloudflare?

Редко. Поскольку причина почти всегда на стороне origin, настройки панели управления не исправят падающее приложение или слишком большой заголовок ответа. Исключение - проверить, что ваш режим SSL/TLS и настройки origin соответствуют тому, что на самом деле делает ваш сервер, - это как минимум исключает неправильную настройку на стороне Cloudflare.

В чем разница между ошибкой 520 и обычным 502 Bad Gateway?

502 - это общий HTTP-статус для невалидного ответа от вышестоящего сервера, используемый любым обратным прокси. Cloudflare использует 520 именно как собственный универсальный код для ответа настолько сломанного, что он не подходит ни под один из других именованных кодов 5xx у Cloudflare, поэтому вместо обычной страницы 502 появляется страница ошибки Cloudflare с Ray ID.

Может ли большая cookie действительно вызвать 520?

Да. Cloudflare применяет лимит на общий размер заголовков ответа, сейчас около 16 КБ, и cookie в него засчитываются. Приложение, которое постоянно дописывает данные в cookie сессии, или устанавливает сразу несколько крупных cookie, может превысить этот лимит и вызвать 520, даже если в самом приложении нет никакого бага.

Поможет ли повторная попытка запроса?

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

Проверить сейчас

Запустите бесплатную проверку своего сайта - аккаунт не нужен.

HTTP check

Следить за этим постоянно

Получайте оповещение в момент сбоя: HostTracker проверяет более чем из 300 локаций и уведомляет по email, SMS, в Slack, Telegram и не только.

Возможности HostTracker

Ещё в этом разделе: Починка: руководства по ошибкам, которые встречаются на практике