Гид по технологиям

Размещение статического сайта в S3 и перенаправление субдомена

• 5 min read • DevOps • Обновлено 22 Nov 2025
Статический сайт на S3 и перенаправление субдомена
Статический сайт на S3 и перенаправление субдомена

Важно: домен, купленный в AWS, платный. За создание Hosted Zone и хранение в S3 взимаются отдельные сборы.

К чему готовиться

  • Нужен аккаунт AWS и домен, купленный в AWS. Если домен зарегистрирован вне AWS, шаги по делегированию NS записей будут другими.
  • Понимание базовых понятий: S3 bucket и Route 53.
  • S3 поддерживает только статические сайты. Серверные языки (PHP, ASP.NET и т. п.) не работают.

Что мы сделаем

  1. Войдём в AWS Console.
  2. Настроим S3 Bucket для статического хостинга.
  3. Создадим запись в Route 53, чтобы субдомен указывал на S3 website endpoint.

Вход в AWS

Перейдите на страницу входа в AWS и авторизуйтесь.

Страница входа в AWS

После успешного входа вы увидите консоль управления AWS.

Консоль управления AWS

Настройка S3 Bucket

  1. В верхней части консоли в строке поиска введите «S3» и откройте сервис.
  2. На дашборде будут перечислены все ваши бакеты из всех регионов. Бакет для статического хоста должен иметь имя, совпадающее с доменом или субдоменом, например kops.devopslee.com.

Выбор S3 бакета

  1. Сделайте бакет общедоступным. Перейдите в вкладку «Permissions», нажмите “Edit” под “Block public access” и снимите все четыре галочки, затем сохраните изменения.

Разрешить публичный доступ к бакету

  1. Добавьте политику бакета, которая разрешает публичное чтение объектов. Пример политики — замените your-s3-bucket-name-here на имя вашего бакета:
{
    "Version": "2012-10-17",
    "Id": "Policy1548223592786",
    "Statement": [
        {
            "Sid": "Stmt1548223591553",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::your-s3-bucket-name-here/*"
        }
    ]
}

Примечание: политика разрешает публичный доступ только для чтения объектов внутри бакета. Следите, чтобы вы не делали бакет публичным для операций записи.

Добавление политики в бакет

  1. Во вкладке «Properties» включите статический хостинг. Укажите индексный документ, например index.html, и (при необходимости) документ для ошибок, например error.html.

Включить статический хостинг

  1. Загрузите ваши файлы сайта в корень бакета. Можно использовать консоль, CLI или автоматически в CI/CD. Пример загрузки index.html:

Загрузка index.html в бакет

Ниже приведён минимальный пример index.html, который можно использовать для теста:




  
  
  Тестовый статический сайт


  

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

Если вы видите эту страницу, S3 и Route 53 настроены корректно.

Создание записи в Route 53

  1. Введите в строку поиска консоли «Route 53» и откройте сервис.
  2. Если вы создаёте субдомен, добавьте Hosted Zone для субдомена или создайте запись внутри основной Hosted Zone.

Перейти в Hosted Zone

  1. Создайте запись (Record Set) для субдомена. Переключите Alias на «Yes», тип — A (IPv4). В параметре “Alias target” выберите “S3 website endpoint” и укажите ваш бакет.

Создание RecordSet

  1. Убедитесь, что в основной Hosted Zone есть NS-запись для вашего субдомена, если вы создали отдельную Hosted Zone.

NS-запись субдомена в основной Hosted Zone

  1. Подождите распространения DNS. Обычно это занимает секунды—минуты, но может доходить до TTL записи.

Список RecordSet

После этого откройте субдомен в браузере. Если всё настроено корректно, вы увидите загруженную страницу.

Критерии приёмки

  • Субдомен открывается и возвращает index.html с S3.
  • HTTP статус 200 для главной страницы.
  • Публичные ресурсы (CSS/JS/изображения) загружаются без 403.
  • При использовании отдельных Hosted Zone — NS-запись делегирована в основной Hosted Zone.

Когда этот способ не сработает

  • Если сайт требует серверной логики (формы с серверной обработкой, динамический рендеринг) — S3 не подойдёт.
  • Если вам обязательно нужен HTTPS для root/субдомена, привязка S3 website endpoint напрямую не даст сертификат. Решение — поставить CloudFront с сертификатом ACM или разместить сайт в другом сервисе.

Альтернативные подходы

  • CloudFront + S3 origin для поддержки HTTPS и ускорения доставки.
  • Amazon Amplify для CI/CD, хостинга статичных SPA и автоматического получения HTTPS.
  • Elastic Beanstalk / EC2 / ECS для динамических приложений.

Быстрые правила-эмпирики

  • Имя бакета = домен/субдомен.
  • Для HTTPS используйте CloudFront перед S3.
  • Для SPA (React/Vue) укажите index.html как документ ошибок, чтобы обрабатывать маршруты клиентской стороны.

Контрольный чеклист для деплоя (роль-ориентированный)

  • Разработчик: подготовил статические файлы, проверил локально.
  • DevOps: создал бакет с именем домена, включил статический хостинг, загрузил файлы.
  • Сетевой инженер: настроил Route 53 запись Alias –> S3 website endpoint, проверил NS-записи.
  • QA: проверил доступность страницы, проверки URL и статических ресурсов.

Мини-методология внедрения

  1. Подготовьте и протестируйте сайт локально.
  2. Создайте бакет с именем домена.
  3. Включите статический хостинг, загрузите файлы.
  4. Разрешите публичный доступ и настройте политику чтения.
  5. Настройте Route 53 Alias-запись на S3 website endpoint.
  6. Тестируйте из разных сетей и очистите кэш DNS при необходимости.

Decision tree для выбора архитектуры

flowchart TD
  A[Нужен статический сайт?] -->|Да| B{Нужен HTTPS на домене?}
  A -->|Нет| Z[Используйте сервер/контейнер]
  B -->|Нет| C[S3 website endpoint]
  B -->|Да| D[CloudFront + S3 origin + ACM SSL]
  C --> E[Route53 Alias -> S3]
  D --> F[Route53 Alias -> CloudFront]

Меры безопасности и приватность

  • Ограничьте публичные права только к операции GetObject.
  • Не храните секреты в публичных файлах.
  • Для приватного контента используйте подписанные URL (pre-signed URLs) или защиту на уровне CloudFront.

Советы по миграции и совместимости

  • Если домен не на AWS, получите NS-записи Hosted Zone и добавьте их у регистратора.
  • Для SPA настройте обработку 404 на выдачу index.html.
  • Для больших сайтов рассмотрите передачу ресурсов в S3 + CloudFront для кэширования и снижения задержки.

Заключение

Вы узнали, как разместить статический сайт в S3 и направить субдомен туда через Route 53. Этот способ прост и экономичен для сайтов без серверной логики. Для HTTPS и производительности рекомендуется добавлять CloudFront. После настройки убедитесь, что имя бакета совпадает с доменом и что публичный доступ настроен корректно.

Короткая контрольная заметка: если нужен HTTPS — добавляйте CloudFront; если нужен сервер — выбирайте другой сервис.


Ключевые ресурсы и примечания:

  • Документация AWS по S3 Static Website Hosting
  • Документация AWS по Route 53
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро