Назад | Перейти на главную страницу

Amazon S3, похоже, блокирует IP-адреса Cloudflare. Как мне это исправить?

У меня есть статический контент, который обслуживает Cloudflare. Cloudflare указывает на Amazon S3, чтобы получить статический контент и передать его через CNAME (cdn.mydomain.com). Корзина настроена правильно, и все работало нормально в течение нескольких месяцев до пятницы, когда я начал получать запросы в моем браузере по истечении времени ожидания. Я убедился, что контент по-прежнему доступен через S3, и открыл тикет с помощью Cloudflare. Cloudflare сообщил, что «похоже, что что-то в Amazon, вероятно, блокирует запросы с наших IP-адресов», и что они видели следующие сообщения в своих журналах:

upstream timed out (110: Connection timed out) while reading response header from upstream cdn.mydomain.com 
upstream prematurely closed connection while reading response header from upstream cdn.mydomain.com 

Вот что у меня уже было в моем CORS файле.

<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>

Стоит ли ставить * в AllowedHeader? Нужно ли явно указывать IP-адреса Cloudflare? Что мне не хватает, чтобы избежать блокировки?

Есть ли причина, по которой вы не используете Amazon? CloudFront распространение, поддерживаемое корзиной S3 для обслуживания вашего статического контента? Должен быть более эффективным, чем CloudFlare -> S3, и если Amazon действительно блокирует доступ CloudFlare к S3 (хотя это не имеет особого смысла, зачем они это делают), это больше не будет проблемой для вас.

Вы также сможете привязать свое имя хоста cdn.mydomain.com к [distribution_id] .cloudfront.net, чтобы сохранить схему URL и сделать переход прозрачным для ваших пользователей. CloudFront работает очень похоже на CloudFlare, в том смысле, что их IP-адреса маршрутизируются по протоколу BGP в ближайшее место по всему миру, однако у Amazon будут более эффективные внутренние системы извлечения CloudFront -> S3.

Насколько я помню, передача данных между S3 и CloudFront бесплатна, так что за пропускную способность вы заплатите не намного больше (если вообще платите).