CloudFlare: настройка CDN для AWS S3

Автор: | 20/09/2019

Требуется создать хостинг статического сайта, используя AWS S3 и подключить к нему CloudFlare CDN.

Создание AWS S3 корзины

Создаём корзину с тем же именем, что и домен, в нашем случае это cdn.example.com:

В Properties включаем хостинг сайта:

Переходим в Permissions, в Bucket Policy включаем полный доступ к корзине:

 {
    "Version": "2012-10-17",
    "Id": "MyPolicy",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::cdn.example.com/*"
        }
    ]
}

Для проверки – создаём файл, и загружаем его в корзину:

[simterm]

$ aws --profile bm-backend s3 cp index.html s3://cdn.example.com
upload: ./index.html to s3://cdn.example.com/index.html

[/simterm]

И открываем по URL корзины:

[simterm]

$ curl http://cdn.example.com.s3-website.us-east-2.amazonaws.com
TestCDN

[/simterm]

Настройка CloudFlare CDN

После регистрации – переходим в панель управления, жмём Add Site:

Есть два варианта подключения домена – с полным переключением DNS, когда для всего домена меняются DNS на сервера CloudFlare, и домен дальше обслуживается ими, либо частичное подключение – например, для одного субдомена, через CNAME-запись на DNS CloudFlare. Но для второго варианта требуется подписка уровня Business или Enterprise.

Пока мы ждём активации нашего Enterprise – добавим домен с полным переключением DNS.

Добавляем домен:

Выбираем подписку для него – тут Free, Enterprise включат после письма на support@:

CloudFlare подтянет все существующие записи домена:

Тут же можем добавить запись cdn.example.com с типом CNAME, указав в значении URL корзины S3:

И последним – CloudFlare сообщает, какие DNS надо задать для домена:

Переходим в панель управления доменами регистратора и обновляем DNS:

Ждём пару минут, проверяем:

[simterm]

$ whois example.com | grep Name
Domain Name: example.com
Name Server: cass.ns.cloudflare.com
Name Server: lloyd.ns.cloudflare.com

[/simterm]

Проверяем в CloudFlare:

И проверяем через, например, https://checkforcloudflare.selesti.com:

 

SSL

Последним шагом – переходим в настройки SSL, и включаем редирект HTTP на HTTPS:

CloudFlare использует свой сертификат, но при необходимости – можно загрузить отдельный:

Готово.