Статический сайт (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 оставляйте короткий срок кеширования.