# Статический сайт
Статический сайт (HTML, CSS, JavaScript, изображения) можно разместить в бакете. Это подходит для лендингов, документации и одностраничных приложений (React, Vue, Angular) без серверной части.
В примерах используется **[AWS CLI](../tools/aws-cli.md)**, настроенный для UzCloud. Замените `my-bucket` на имя своего бакета.
## Шаг 1. Загрузите сайт
```bash
aws s3 sync ./dist s3://my-site/ --delete --cache-control "public, max-age=300"
```
## Шаг 2. Откройте публичный доступ
Примените политику, которая разрешает всем читать файлы сайта:
```bash
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](../examples/nginx-proxy.md)** и замените блок `location`:
```nginx
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;`.
> [!TIP]
> После выкладки новой версии файлы с долгим `Cache-Control` могут оставаться в кеше браузеров. Давайте ресурсам имена с версией (например, `app.3f9c2.js`), а для `index.html` оставляйте короткий срок кеширования.
> [!TIP]
> **См. также:**
>
> - **[Параметры подключения](../connection.md)**