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

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

Ошибка Cloudflare 521: веб-сервер не отвечает - причины и решения

Ошибка Cloudflare 521 означает, что Cloudflare достучался до IP-адреса вашего origin, но сервер активно отказал в соединении, обычно потому что на порту, к которому пытался подключиться Cloudflare, никто не слушает, запрос заблокировал файрвол, либо сам веб-сервер остановлен. Это отличается от таймаута: что-то на origin сразу же ответило "нет".

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

Когда Cloudflare проксирует запрос, он открывает TCP-соединение с вашим origin-сервером на порту, настроенном для этой записи. Ошибка 521 срабатывает, когда origin в ответ присылает сброс TCP (RST) или ICMP "connection refused" вместо того, чтобы принять соединение. Это однозначный отказ, а не молчание. Сравните с ошибкой 522, где Cloudflare вообще не получает ответа в пределах своего таймаута, или с ошибкой 520, где соединение устанавливается успешно, но следующий за ним HTTP-ответ оказывается сломанным.

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

Посетители видят собственную страницу Cloudflare: "Error 521: web server is down" вместе с Ray ID. Запрос curl к домену вернет тот же статус:

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

Поскольку origin отказал в соединении на сетевом уровне, до вашего приложения ничего не доходит, поэтому логи приложения обычно вообще ничего не покажут для провалившихся запросов. Свидетельства лежат ближе к сети: собственные логи запуска и доступа вашего веб-сервера, логи соединений вашего файрвола или security group, а также системные логи на хосте origin (journalctl -u nginx, systemctl status nginx или эквивалент для вашего стека).

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

  • Процесс веб-сервера остановлен или упал. На порту вообще никто не слушает, поэтому любая попытка соединения отклоняется немедленно.
  • Cloudflare настроен на обращение не к тому порту. Если порт origin, заданный в DNS-записи или в сетевых настройках Cloudflare, не совпадает с тем, что реально слушает ваш сервер, любое соединение будет отклонено.
  • Файрвол или облачная security group блокирует диапазоны IP Cloudflare. Если правило допускает только определенные исходные IP, а актуальные диапазоны Cloudflare в него не входят, либо входили раньше и были удалены, соединения с edge-узлов Cloudflare отбрасываются или отклоняются.
  • Режим SSL/TLS выставлен на Full или Full strict, но на origin никто не слушает порт 443. Эти режимы требуют, чтобы Cloudflare подключался к origin по HTTPS; если origin отдает только обычный HTTP или настройка сертификата так и не завершилась, попытка HTTPS-соединения отклоняется.
  • Порт, который должен использовать веб-сервер, уже занят посторонним сервисом, из-за чего сам веб-сервер так и не запускается.

521 против 523 против 522

Эти три кода легко перепутать, поскольку все они описывают соединение, так и не породившее HTTP-ответ, однако каждый означает, что Cloudflare провалился на своем этапе.

  • 521, web server is down: Cloudflare достучался до IP-адреса origin, и там что-то активно отказало в соединении (сброс TCP или недостижимость ICMP). Сервер существует и ответил, просто отказом.
  • 523, origin is unreachable: Cloudflare даже не смог дойти до этого. Это указывает на проблему маршрутизации, DNS или IP - чаще всего DNS-запись в Cloudflare, все еще указывающая на старый IP после миграции сервера, либо упавший приватный сетевой маршрут (например, Cloudflare Tunnel).
  • 522, connection timed out: Cloudflare попытался выполнить TCP-рукопожатие, но не получил ответа вовремя - ни согласия, ни отказа. См. отдельное руководство по ошибке Cloudflare 522 для этого случая.

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

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

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

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

  1. Перезагрузите страницу после недолгого ожидания. Если оператор сайта перезапускает сервер, исправление может уже быть в процессе.
  2. Проверьте статус-страницу сайта, если она есть, либо его соцсети - на предмет известного уведомления о сбое.
  3. На своей стороне менять нечего. Отказ происходит на собственном сервере сайта, а не в вашем браузере, DNS или у провайдера.

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

  1. Убедитесь, что процесс веб-сервера действительно запущен: systemctl status nginx (или эквивалент), и проверьте его логи на предмет падения или неудачного перезапуска.
  2. Убедитесь, что порт, на который настроен Cloudflare, совпадает с тем, что слушает ваш сервер. Сверьте порт origin в настройках DNS-записи или Network в панели управления Cloudflare с реальными слушающими портами вашего сервера (ss -tlnp в Linux).
  3. Проверьте, что ваш файрвол или облачная security group разрешает входящий трафик от актуальных опубликованных диапазонов IP Cloudflare на этом порту. Cloudflare публикует свои текущие диапазоны IPv4 и IPv6 на cloudflare.com/ips; правило, построенное по старой копии этого списка, начнет отклонять новые диапазоны по мере их добавления.
  4. Если ваш режим шифрования SSL/TLS - Full или Full strict, убедитесь, что на порту 443 на origin действительно кто-то слушает с сертификатом, который Cloudflare может проверить. Временное переключение на Flexible - полезный диагностический шаг, чтобы подтвердить именно эту причину, а не постоянное решение, поскольку Flexible оставляет соединение между Cloudflare и вашим origin незашифрованным.
  5. Обойдите Cloudflare, чтобы проверить origin напрямую и увидеть сырой отказ без промежуточного edge-слоя:
    curl -v -H "Host: example.com" https://ORIGIN_IP:PORT/
    "Connection refused" здесь подтверждает, что проблема в слушателе или файрволе на origin, а не в Cloudflare.
  6. Проверьте, не занял ли этот порт что-то другое на хосте, - это помешало бы веб-серверу привязаться к нему при запуске.

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

Правило файрвола, допускающее только диапазоны Cloudflare, - частая причина, по которой 521 возвращается месяцы спустя, поскольку Cloudflare со временем добавляет и выводит из обращения диапазоны IP, а правило, скопированное один раз, со временем устаревает. HTTP-проверка, запускаемая снаружи вашей сети, ловит возникающий из-за этого сбой так же, как его увидел бы посетитель, вместо того чтобы полагаться на то, что кто-то заметит недоступность сайта и сообщит о ней.

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

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

Означает ли ошибка 521 то же самое, что физическое выключение сервера?

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

Как быстрее всего подтвердить, что причина в файрволе?

Обратитесь к origin напрямую по его IP-адресу с заголовком Host домена, минуя Cloudflare. Если и там будет отказ, блокировка, скорее всего, находится в собственном файрволе или security group origin, а не связана конкретно с диапазонами IP Cloudflare.

Почему ошибка 521 может начаться без каких-либо изменений на моем сервере?

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

Исправляет ли переключение SSL/TLS в режим Flexible ошибку 521 навсегда?

Оно может замаскировать несовпадение в режиме Full или Full strict, поскольку Flexible не требует HTTPS на origin, но при этом соединение между Cloudflare и вашим сервером остается незашифрованным. Относитесь к нему как к диагностическому шагу, затем исправьте TLS-слушатель на origin и переключитесь обратно.

Чем 521 отличается от 523?

521 означает, что Cloudflare достучался до origin и получил отказ. 523 означает, что Cloudflare вообще не смог до него достучаться, что указывает на DNS, маршрутизацию или сломанный туннель, а не на что-либо, сделанное самим сервером origin.

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

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

HTTP check

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

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

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

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