Хранение и резервные копии

Статический сайт

1 мин чтения

Статический сайт (HTML, CSS, JavaScript, изображения) можно разместить в бакете. Это подходит для лендингов, документации и одностраничных приложений (React, Vue, Angular) без серверной части.

В примерах используется AWS CLI, настроенный для UzCloud. Замените my-bucket на имя своего бакета.

Шаг 1. Загрузите сайт

aws s3 sync ./dist s3://my-site/ --delete --cache-control "public, max-age=300"

Шаг 2. Откройте публичный доступ

Примените политику, которая разрешает всем читать файлы сайта:

cat > policy.json <<'EOF'
{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "PublicReadWebsite",
    "Effect": "Allow",
    "Principal": "*",
    "Action": ["s3:GetObject"],
    "Resource": ["arn:aws:s3:::my-site/*"]
  }]
}
EOF
aws s3api put-bucket-policy --bucket my-site --policy file://policy.json

Теперь файлы доступны по адресу https://s3.uzcstorage.uz/my-site/index.html.

Шаг 3. Подключите свой домен

Чтобы сайт открывался по адресу https://example.com, а для адресов папок отдавался index.html, поставьте перед бакетом Nginx. Возьмите конфигурацию из статьи Проксирование S3 через Nginx и замените блок location:

location / {
    limit_except GET HEAD { deny all; }

    # /about/ -> /about/index.html
    rewrite ^(.*)/$ $1/index.html break;

    proxy_pass https://s3.uzcstorage.uz/my-site;
    proxy_set_header Host s3.uzcstorage.uz;
    proxy_ssl_server_name on;
    proxy_intercept_errors on;
    error_page 403 404 = /index.html;   # for single-page applications
}

Для обычного многостраничного сайта замените последнюю строку на error_page 404 /404.html;.

Совет

После выкладки новой версии файлы с долгим Cache-Control могут оставаться в кеше браузеров. Давайте ресурсам имена с версией (например, app.3f9c2.js), а для index.html оставляйте короткий срок кеширования.

Совет

См. также: