Блог

Свой поддомен для Timeweb Object Storage: подключение, HTTPS и загрузка файлов

06.09.2026 Автор: Керим Категория: DevOps , Hosting
Свой поддомен для Timeweb Object Storage: подключение, HTTPS и загрузка файлов

Свой поддомен для Timeweb Object Storage: пошаговое руководство

Как подключить собственный поддомен вида files.example.com к бакету Timeweb S3, получить бесплатный HTTPS и начать раздавать медиафайлы по красивым ссылкам.

Что получится в итоге:

https://files.example.com/site-1/2026/09/photo.jpg

вместо длинного https://s3.twcstorage.ru/имя-бакета/site-1/2026/09/photo.jpg.


Что понадобится

  • Аккаунт Timeweb Cloud с положительным балансом
  • Свой домен второго уровня
  • Доступ к DNS-панели того сервиса, который держит NS-серверы домена

Последний пункт — самый важный, и именно на нём чаще всего застревают. Разберём его отдельно.


Шаг 1. Создайте бакет

В панели Timeweb Cloud: Хранилище S3 → Создать.

Выберите класс хранения, тариф и проект. Тип доступа — публичный, если бакет предназначен для картинок и видео на сайте. Иначе прямые ссылки будут отдавать 403.

Для бэкапов и приватных данных заведите отдельный бакет с приватным доступом. Смешивать публичное и приватное в одном не стоит.

Если создание не проходит — проверьте баланс. При нулевом балансе аккаунт блокируется и новые сервисы не создаются.


Шаг 2. Выясните, кто держит NS домена

Это ключевой шаг. Домен может быть зарегистрирован в одном месте, привязан к хостингу в другом, а DNS-записи при этом обслуживаться в третьем. Редактировать нужно там, где стоят NS-серверы, — все остальные DNS-панели будут показывать записи, которые никто в интернете не читает.

Проверьте так:

nslookup -type=NS example.com 8.8.8.8

или через whatsmydns.net, тип записи NS.

Типичные ответы:

Что видитеГде редактировать DNS
dns1.p0X.nsone.net, registrar-servers.comNamecheap
ns1.timeweb.ru, ns2.timeweb.ruTimeweb
*.cloudflare.comCloudflare
ns1.reg.ru и подобныеу соответствующего регистратора

Частая ловушка. Домен добавлен в панель хостинга Timeweb, там даже есть «Редактор DNS» с записями — но NS указывают на регистратора. В этом случае панель Timeweb показывает локальную зону, которая не применяется. Записи нужно править у регистратора.


Шаг 3. Добавьте CNAME

В DNS-панели держателя NS создайте одну запись:

ПараметрЗначение
ТипCNAME
Хост / имяfiles
Значениеs3.twcstorage.ru
TTLавтоматический

Несколько уточнений:

  • Точка в конце значения (s3.twcstorage.ru.) допустима, некоторые панели ставят её сами
  • Домен должен быть третьего уровня или глубже. К корневому домену бакет не привязывается — CNAME на корень запрещён стандартом DNS
  • Для хоста files не должно быть других записей — ни A, ни AAAA. CNAME не сочетается ни с чем
  • Если включено проксирование Cloudflare (оранжевое облако) — временно отключите его, иначе привязка не пройдёт

Шаг 4. Дождитесь распространения и проверьте

Подождите 15–30 минут, затем:

nslookup -type=CNAME files.example.com 8.8.8.8

Ожидаемый ответ:

files.example.com  canonical name = s3.twcstorage.ru

Резолвер 8.8.8.8 указан намеренно — так вы проверяете, что запись видна снаружи, а не берётся из локального кэша.

Не переходите к следующему шагу, пока не увидите этот ответ. Timeweb проверяет CNAME при привязке, и если запись ещё не разошлась, вы получите ошибку.


Шаг 5. Привяжите домен к бакету

В настройках бакета откройте вкладку «Домены» → «Привязать домен».

  • Введите files.example.com
  • Галку «Выпустить SSL-сертификат» оставьте включённой

Это бесплатный Let’s Encrypt, Timeweb выпускает его автоматически и продлевает за неделю до истечения. Ничего дополнительно настраивать для HTTPS не нужно.

Если в зоне есть CAA-записи, убедитесь, что они разрешают выпуск Let’s Encrypt. При отсутствии CAA всё выпустится без вопросов.

Домен должен появиться в списке «Привязанные домены». Сертификату дайте 5–10 минут.


Шаг 6. Загрузите файлы

Веб-интерфейс во вкладке «Объекты» годится для нескольких файлов. Для пачек удобнее Cyberduck.

  1. На вкладке «Подключение» у бакета скачайте профиль .cyberduckprofile и откройте его двойным кликом — эндпоинт и регион пропишутся автоматически
  2. В Cyberduck нажмите «Открыть подключение», выберите профиль Timeweb Cloud
  3. Вставьте Access Key ID и Secret Access Key из вкладки «Подключение»
  4. Подключитесь, откройте бакет и перетащите папки прямо из проводника

Папки создавать заранее не нужно: в S3 нет каталогов, «папка» появляется сама из пути в имени объекта.


Шаг 7. Проверьте результат

Откройте ссылку на конкретный файл в браузере — картинка должна отобразиться.

Для диагностики удобнее командная строка:

curl -I https://files.example.com/site-1/2026/09/photo.jpg

Флаг -I запрашивает только заголовки, не скачивая сам файл. Смотрите на три вещи:

  • код статуса — нужен 200
  • content-type — должен соответствовать типу файла (image/jpeg, video/mp4)
  • content-length — размер, чтобы убедиться, что файл залился целиком

Как раскладывать файлы

Рабочая схема — сайт, затем год и месяц:

files.example.com/site-1/2026/09/X8fK2pLm.jpg
files.example.com/site-2/2026/09/a9QwT7nR.webp

Почему именно так:

  • Переименование в S3 — это перезалив. Каталогов нет, есть только ключи целиком, поэтому «переименовать папку» означает скопировать и удалить все объекты внутри. Чем меньше в пути изменчивых сегментов, тем лучше. Год и месяц не меняются никогда, slug поста — может
  • Только латиница в нижнем регистре, без пробелов. Ключи регистрозависимы, кириллица превращается в процентную кодировку
  • Имена файлов 8–12 символов. Длинные хэши работают, но такие ссылки нельзя продиктовать и они ломаются при копировании из мессенджеров

Типичные ошибки

«Для указанного домена не найден CNAME» Запись ещё не разошлась либо добавлена не там. Вернитесь к шагу 2 и проверьте, кто держит NS.

«Домен уже размещен пользователем Timeweb» Домен или поддомен занят другим аккаунтом Timeweb. Проверьте раздел «Поддомены» в панели хостинга — возможно, вы создали его там раньше. Если поддомена нет, а домен привязан к вашему же второму аккаунту, напишите тикет из личного кабинета с ID обоих аккаунтов и попросите снять блокировку занятости. Через чат это решается медленнее.

AccessDenied при обращении к корню домена Это нормальное поведение, а не ошибка. Timeweb не отдаёт ни листинг файлов, ни индексную страницу при обращении к домену без пути. Привязка домена рассчитана только на прямые ссылки к конкретным файлам. Заодно это защищает вас: посторонний не может получить перечень содержимого бакета.

AccessDenied на конкретном существующем файле У объекта приватная ACL. В Cyberduck: Get Info → Permissions, выставьте публичное чтение — можно сразу для всей загруженной пачки.

AccessDenied вместо 404 на несуществующем файле Тоже нормально. Без прав на листинг S3 не подтверждает, существует объект или нет.

content-type: application/octet-stream Браузер предложит скачать файл вместо показа. Обычно возникает при загрузке через API или скрипт. Cyberduck проставляет тип корректно.


Что стоит сделать дополнительно

Отдельный ключ для автоматики. Ключ из вкладки «Подключение» даёт полный доступ к бакету. Если планируете заливать файлы из CI или скриптом, создайте отдельного пользователя во вкладке «Пользователи» с ограниченными правами. Мастер-ключ держите только для ручной работы и никогда не коммитьте в репозиторий.

Длинный кэш для неизменяемых файлов. Если имена файлов уникальны и содержимое по конкретному URL никогда не меняется, ставьте заголовок:

Cache-Control: public, max-age=31536000, immutable

Исходящий трафик S3 тарифицируется, и кэширование на стороне браузера заметно снижает расход.

Помните про публичность. В публичном бакете любой файл доступен всем, кто знает ссылку. Ничего чувствительного туда не кладите — включая служебные файлы, которые попали при загрузке папки целиком.