Перейти до основного вмісту

Посібники / Виправити: посібники для помилок, з якими стикаються насправді

Помилка 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-сервері перевірте логи вебсервера й застосунку на той самий часовий проміжок, коли трапилися збої. Шукайте перезапуск процесу, помилку сегментації, вбивство через нестачу пам'яті в системному лозі (dmesg чи journalctl -k), або помилку застосунку, яка обірвала запит посеред відповіді. Якщо логи застосунку взагалі не показують нічого незвичного, проблема, найімовірніше, у відповіді, що технічно завершилася, але порушила якесь HTTP-правило, наприклад завеликий заголовок.

Що спричиняє помилку 520

  • Процес origin-сервера впав чи перезапустився під час обробки запиту. З'єднання закривається до того, як пішла повна відповідь. Це найпоширеніша причина.
  • Origin-сервер скинув TCP-з'єднання (RST) замість того, щоб закрити його коректно. Сервери застосунків під тиском пам'яті чи з тайм-аутом воркера часто так роблять.
  • Заголовки відповіді перевищують ліміт Cloudflare у 16 КБ. Великий заголовок set-cookie, стос заголовків для налагодження чи багатослівні заголовки CORS можуть перевищити загальний ліміт, який прийме Cloudflare.
  • Кукі чи об'єднаний заголовок кукі завеликий. Дані сесії, трекінгові кукі чи неправильно налаштоване сховище кукі можуть з часом перерости ліміти браузера й проксі.
  • Відсутній чи неправильно сформований рядок статусу. Деякі фреймворки повертають сирий рядок помилки замість належної 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. Виміряйте розмір заголовків відповіді та кукі. Один великий заголовок set-cookie чи купа заголовків для налагодження, залишених у продакшені, можуть підняти загальний розмір понад 16 КБ; приберіть зайве й перенесіть великі дані сесії на бік сервера.
  4. Перевірте на зіпсовані відповіді: зворотний проксі чи балансувальник навантаження, спрямований не на той upstream, застосунок, що повертає простий текст на HTTP-порту, або відсутній рядок статусу від типового обробника помилок фреймворку.
  5. Перевірте на вичерпання ресурсів на origin-сервері: ліміти пам'яті, ліміти пулу з'єднань, чи менеджер процесів (systemd, pm2, пул воркерів Gunicorn чи uWSGI), що застряг у циклі перезапуску.
  6. Якщо між інтернетом і вашим сервером застосунку стоїть WAF, антивірусний проксі чи балансувальник навантаження, перевірте його власні логи на предмет з'єднань, які він скинув чи обірвав приблизно в той самий час.

Як запобігти цьому

Помилка 520 зазвичай спершу з'являється як звернення в підтримку, а не як сповіщення, бо ніщо на origin-сервері обов'язково не логує невдале рукостискання з edge-вузлом Cloudflare так, як логує виняток застосунку. Зовнішня перевірка доступності, що виконується поза вашою власною мережею, ловить той самий збій, який бачить відвідувач, з тієї самої точки зору, ще до того, як комусь довелося про це повідомити. Запуск перевірки з кількох країн також одразу показує, чи 520 глобальна, чи обмежена одним регіоном - деталь, яка визначає, з чого починати діагностику.

Пов'язані помилки

Часті запитання

Помилка 520 - вина Cloudflare чи моя?

Майже завжди origin-сервера. Cloudflare отримав відповідь і не зміг у ній розібратися чи передати її далі, а це означає, що зіпсовану відповідь створив саме сервер origin, а не мережа Cloudflare.

Чи означає помилка 520, що весь мій сайт лежить?

Не обов'язково. Вона означає, що провалився конкретний запит, який її викликав. Якщо origin-сервер падає під навантаженням, він може віддавати 520 деяким запитам і нормальні відповіді іншим, поки основну проблему не виправлять.

Чи можу я виправити помилку 520 лише з панелі керування Cloudflare?

Рідко. Оскільки причина майже завжди на origin-сервері, налаштування панелі не виправлять застосунок, що падає, чи завеликий заголовок відповіді. Виняток - перевірка, що ваш режим SSL/TLS і налаштування origin-сервера збігаються з тим, що сервер справді робить, - це принаймні виключає неправильну конфігурацію на боці Cloudflare.

Яка різниця між помилкою 520 і звичайним 502 Bad Gateway?

502 - загальний HTTP-статус для невалідної відповіді від upstream-сервера, який використовує будь-який зворотний проксі. Cloudflare використовує 520 спеціально як власний загальний контейнер для відповіді, настільки зіпсованої, що вона не підходить під жоден інший названий код 5xx у Cloudflare, тому й з'являється сторінка помилки Cloudflare з Ray ID замість типової сторінки 502.

Чи справді велика кукі може спричинити 520?

Так. Cloudflare застосовує ліміт на загальний розмір заголовків відповіді, зараз близько 16 КБ, і кукі враховуються в цей ліміт. Застосунок, який постійно дописує до кукі сесії, або встановлює одразу кілька великих кукі, може перевищити цей ліміт і спричинити 520 навіть тоді, коли в самому застосунку немає жодного бага.

Чи допоможе повторний запит?

Іноді, якщо причиною був тимчасовий збій чи перезапуск на origin-сервері, який уже відновився. Якщо origin-сервер стабільно надсилає зіпсовані відповіді, наприклад через завеликий заголовок у кожному запиті, повторна спроба не допоможе, доки origin-сервер не виправлять.

Перевірити зараз

Запустіть безкоштовну перевірку власного сайту - обліковий запис не потрібен.

HTTP check

Стежити за цим постійно

Отримуйте сповіщення в момент збою: HostTracker перевіряє з понад 300 локацій і повідомляє вас електронною поштою, SMS, у Slack, Telegram та інших каналах.

Можливості HostTracker

Ще в цьому розділі: Виправити: посібники для помилок, з якими стикаються насправді