Cloudflare возвращает 520 из-за пустого ответа сервера от Heroku

#ssl #heroku #cloudflare

Вопрос:

Мое приложение Rails, которое отлично работало в течение многих лет, внезапно начало возвращать ошибки Cloudflare 520. В частности, api.exampleapp.com внутренние вызовы возвращают 520, в то время как обращения к www.exampleapp.com поддомену интерфейса работают просто отлично.

Самое сложное в этом то, что ничего не изменилось ни в моей конфигурации, ни в коде вообще. Cloudflare считает, что это происходит, поскольку сервер Heroku возвращает пустой ответ.

 > GET / HTTP/1.1
> Host: api.exampleapp.com
> Accept: */*
> Accept-Encoding: deflate, gzip
> 
{ [5 bytes data]
* TLSv1.2 (IN), TLS alert, close notify (256):
{ [2 bytes data]
* Empty reply from server
* Connection #0 to host ORIGIN_IP  left intact
curl: (52) Empty reply from server
error: exit status 52
 

На конце Heroku мои журналы, похоже, даже не регистрируют запрос, когда я нажимаю на любой из этих URL-адресов. Я также дважды проверил свою настройку SSL (сертификат происхождения, созданный в Cloudflare, установленный на Heroku), на всякий случай, и он кажется правильным и не истек.

Я в полном замешательстве. Приложение не работает уже пару дней, пользователи жалуются, и ни одна из групп обслуживания клиентов не отвечает, несмотря на то, что является платным клиентом. Мои знания в области разработки довольно ограничены, поэтому я очень ценю любую помощь или зацепки!

Ответ №1:

Добро пожаловать в клуб: https://community.cloudflare.com/t/sometimes-a-cf-520-error/288733 Похоже, это проблема Cloudflare, возникшая в конце июля и затрагивающая сотни сайтов, работающих в самых разных конфигурациях. Прошел почти месяц с момента первого сообщения о проблеме, Cloudflare «исправила» ее дважды, но она все еще существует. Очень неприятно.

Комментарии:

1. Это уже исправлено? У меня все еще есть эта проблема сейчас.

2. Не для меня и не для десятков людей в сообществе Cloudflare — community.cloudflare.com/t/… . Но Cloudflare, похоже, все равно — они считают, что мы все, должно быть, делаем что-то не так.

Ответ №2:

Измените журналы веб-сервера в информационное состояние и проверьте, не превышает ли ваше приложение некоторые директивы HTTP/2 при обработке подключения.

Если это так, попробуйте увеличить размер директивы:

 #nginx
server {
    ...
    http2_max_field_size 64k;
    http2_max_header_size 64k;
}