Домен и сервер настраиваются в двух разных местах и не зависят друг от друга: DNS можно прописать заранее, ещё до того как на сервере что-то готово. Показываем весь путь - от IP-адреса в личном кабинете до рабочего HTTPS через обратный прокси.
Домен куплен, VPS работает, а в браузере сайт всё ещё открывается только по голому IP-адресу вроде 203.0.113.10. Привязать домен к VPS - значит настроить две вещи, которые легко перепутать между собой: DNS-запись, которая говорит миру, какой IP стоит за именем домена, и настройку на самом сервере, которая решает, что показать по этому имени. Ниже - весь путь по порядку: где взять IP-адрес VPS, как прописать запись у регистратора, как проверить, что она разошлась по миру, и как в конце получить нормальный HTTPS вместо предупреждения браузера о недоверенном соединении.
Коротко. В панели домена добавьте запись A с именем
@и значением - IPv4-адресом вашего VPS (он в личном кабинете WeaselCloud, вкладка «Информация о хостинге»), и такую же дляwww. Подождите, пока запись разойдётся - обычно от нескольких минут до пары часов, проверить можно командойdig +short домен. На сервере поставьте обратный прокси: проще всего Caddy, он сам получит и продлит сертификат Let's Encrypt, без ручного certbot и напоминаний в календаре.
Как устроена привязка домена к VPS: два независимых уровня
Когда браузер открывает example.com, происходит два шага, которые ничего не знают друг о друге. Сначала браузер спрашивает у DNS (Domain Name System - системы, которая переводит имена в IP-адреса): какой IP отвечает за example.com. Получив ответ, он отправляет запрос уже прямо на этот IP, добавив в заголовок Host: example.com - имя, по которому сервер понимает, какой из возможных сайтов нужно показать именно сейчас.
Отсюда практический вывод: DNS-запись можно прописать в любой момент, хоть до того, как на VPS вообще что-то настроено. Домен просто будет указывать на IP, где пока никто не отвечает - браузер покажет ошибку соединения, а не «сайт не существует». Как только на сервере поднимется обратный прокси или веб-сервер, тот же самый домен заработает без единого изменения в DNS.
Шаг 1. Найдите настоящий IP-адрес сервера
Зайдите в личный кабинет my.weasel.cloud, откройте свою услугу и посмотрите вкладку «Информация о хостинге» - там указаны IPv4-адрес сервера, логин (обычно root) и пароль открытым текстом. Именно этот IPv4 и пойдёт в DNS-запись - не адрес, который вы, возможно, помните с момента заказа, а актуальный, из панели прямо сейчас. Если непонятно, где вообще искать этот раздел - в статье обзор личного кабинета WeaselCloud разобрано меню целиком.
Заодно проверьте по SSH, слушает ли сервер вообще нужный порт - это сэкономит время на шаге с HTTPS:
ss -tlnp
В выводе ищите строки с :80 или :443. Если их пока нет - это нормально для нового сервера, к этому вернёмся в шаге про обратный прокси.
Шаг 2. Пропишите A-запись у регистратора или DNS-провайдера
Это делается не в панели WeaselCloud, а там, где управляется зона вашего домена - в личном кабинете регистратора либо у стороннего DNS-провайдера вроде Cloudflare, если на него переключены серверы имён (NS) домена. Интерфейсы у всех примерно одинаковые, ниже - на примере Cloudflare.
Добавьте запись со следующими значениями:
- Type -
A - Name -
@(сам домен,example.com; часть панелей вместо@просит оставить поле пустым или вписать имя домена целиком) - Поле со значением адреса (обычно называется IPv4 address или Content, в зависимости от панели) - IPv4 из шага 1
- TTL (time to live, время жизни записи в кэше) -
Autoили короткое значение вроде300секунд на время настройки, чтобы дальнейшие правки применялись быстрее
Затем добавьте вторую запись A с именем www и тем же IP - иначе сайт откроется по example.com, но не по www.example.com. Вместо второй A-записи можно поставить CNAME с именем www и значением example.com - тогда IP правится в одном месте, а не в двух; для самого домена (@) CNAME ставить нельзя, только A.
Тип | Имя | Значение | Зачем |
|---|---|---|---|
A | | IPv4 сервера | домен без www открывает сайт |
A или CNAME | | IPv4 сервера (или | домен с www открывает тот же сайт |
Про запись AAAA (аналог A, но для IPv6-адреса) стоит сказать отдельно: она нужна, только если ваш провайдер реально выдал серверу собственный IPv6-адрес, который можно вписать. Не у каждого VPS он есть по умолчанию - уточняйте это в своей панели, прежде чем искать AAAA в интерфейсе DNS. Для обычного сайта единственной A-записи для IPv4 вполне достаточно: посетители без IPv6 пойдут по ней, а те, у кого IPv6 есть, при отсутствии AAAA тоже упадут на IPv4 - сайт откроется в любом случае.
Шаг 3. Дождитесь, пока запись разойдётся
Новая запись не появляется у всех одновременно: DNS-серверы по всему миру кэшируют старый ответ на время, равное TTL предыдущей записи. Обычно хватает 5-30 минут, иногда - пары часов; смена NS-серверов домена целиком (не отдельной записи) занимает больше времени, вплоть до суток.
Проверьте с любого компьютера:
dig +short example.com
Команда вернёт IP-адрес, который сейчас видно из вашей сети. Если dig недоступен (например, в Windows без дополнительных утилит) - тот же смысл у команды nslookup example.com. Как только в ответе появится IP вашего сервера - запись применилась хотя бы у вашего резолвера; сверить сразу по многим странам мира можно на сайтах вроде whatsmydns.net.
Шаг 4. Получите HTTPS через обратный прокси
Приложение или сайт на сервере обычно слушает локальный порт вроде 127.0.0.1:3000, а не 80 и 443 напрямую. Наружу его отдаёт обратный прокси - программа, которая принимает подключения снаружи, смотрит на заголовок Host и решает, какому внутреннему сервису передать запрос. Она же обычно занимается и HTTPS: получает сертификат и подставляет его в TLS-соединение вместо вас.
Для этой задачи мы рекомендуем Caddy, а не связку nginx + certbot - и вот почему. У Caddy сертификат Let's Encrypt получается и продлевается автоматически, без отдельной команды и без крон-задачи, о которой нужно помнить. Конфиг у него короче, а ошибиться в нём сложнее, потому что там просто меньше мест для ошибки. Для одного сайта на одном VPS - а это как раз типичная задача, с которой сюда приходят, - разница ощутима на практике, а не только на бумаге.
Установка Caddy
sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy
- Первые четыре строки добавляют официальный репозиторий Caddy и его ключ подписи - без этого
aptпросто не найдёт пакет, потому что в стандартных репозиториях Ubuntu Caddy обычно нет или лежит устаревшая версия.
После установки Caddy сразу запускается как служба systemd с пустым конфигом по умолчанию - это ожидаемо, настраивать его будем следующим шагом.
Настройка Caddyfile
Откройте главный конфигурационный файл Caddy:
sudo nano /etc/caddy/Caddyfile
Удалите содержимое по умолчанию и впишите свой домен вместо него:
example.com, www.example.com {
reverse_proxy 127.0.0.1:3000
}
reverse_proxy 127.0.0.1:3000 - здесь укажите тот же адрес и порт, на котором на самом деле слушает ваше приложение (его вы видели в выводе ss -tlnp на шаге 1). Примените конфигурацию:
sudo systemctl reload caddy
Сразу после перечитывания конфига Caddy проходит по всем именам хостов в файле и для каждого, у которого ещё нет действующего сертификата, сам запускает получение через ACME (протокол автоматического выпуска сертификатов, на котором построен Let's Encrypt) - обычно через порт 80, а если он недоступен, через порт 443. Это происходит сразу после reload, а не при первом заходе постороннего посетителя, поэтому здесь и важны шаги 2-3: без разошедшейся DNS-записи и открытых портов 80/443 выпуск просто не пройдёт, и Caddy будет повторять попытки, показывая ошибку в логах.
Проверьте результат:
curl -I https://example.com
Что вы должны увидеть: строку вида HTTP/2 200 (или другой успешный код, в зависимости от того, что отдаёт ваше приложение) и заголовки ответа без предупреждений о сертификате. Если вместо этого curl ругается на сертификат или не может подключиться вовсе - смотрите раздел «Частые проблемы» ниже.
Если вместо Caddy нужен nginx
Иногда nginx уже стоит по другой причине - например, приложение изначально разворачивалось по готовой инструкции именно с ним. В этом случае сертификат ставится отдельно, через certbot: sudo apt install -y nginx certbot python3-certbot-nginx, в файле конфигурации сайта прописываете server_name example.com www.example.com; и proxy_pass http://127.0.0.1:3000;, включаете конфиг и выпускаете сертификат одной командой:
sudo certbot --nginx -d example.com -d www.example.com
Certbot сам найдёт нужный серверный блок по имени домена, допишет в него HTTPS-секцию и настроит автопродление сертификата через системный таймер - в отличие от Caddy, эту команду нужно один раз запустить вручную самостоятельно, автоматика тут появляется только после первого выпуска.
Частые проблемы: где искать причину
Домен привязан, а сайт не открывается - это почти всегда одна из трёх причин, и они легко отличаются друг от друга по симптому.
Симптом | Причина | Как проверить |
|---|---|---|
Браузер вообще не может найти сервер, ошибка вида | DNS-запись ещё не разошлась или не создана |
|
Домен резолвится в верный IP, но браузер пишет об отказе в соединении | на сервере ничего не слушает нужный порт |
|
То же самое, но сервис локально отвечает ( | фаервол блокирует входящие 80/443 снаружи |
|
Третий случай разбирается отдельно и подробно в статье про базовый фаервол ufw на VPS - там же объясняется, почему сама программа может слушать порт, но снаружи он всё равно закрыт, если фаервол его явно не разрешил.
Частые вопросы
Как узнать IP-адрес VPS в WeaselCloud
В личном кабинете my.weasel.cloud откройте страницу своей услуги и посмотрите вкладку «Информация о хостинге» - там указаны IPv4-адрес, логин и пароль сервера. Именно этот адрес нужно вписывать в DNS-запись, а не адрес из письма о покупке, если он вдруг изменился.
Как прописать A-запись для домена
В панели управления DNS вашего домена (у регистратора или у стороннего DNS-провайдера) создайте запись типа A с именем @ и значением - IPv4-адресом сервера, и вторую такую же для www. TTL можно оставить по умолчанию или временно уменьшить на время настройки, чтобы дальнейшие правки применялись быстрее.
Сколько ждать, пока DNS обновится
Обычно от нескольких минут до пары часов для отдельной записи. Смена NS-серверов домена целиком - более медленная операция, до суток. Проверить текущее состояние можно командой dig +short example.com или сайтом вроде whatsmydns.net.
Нужен ли IPv6-адрес для обычного сайта
Нет, обязательным он не является: одной A-записи с IPv4 достаточно, чтобы сайт открылся у всех посетителей. AAAA-запись имеет смысл добавлять, только если у вашего сервера действительно есть собственный IPv6-адрес - это стоит уточнить в панели своего провайдера, потому что не у каждого VPS он выдаётся автоматически.
Как получить HTTPS на VPS бесплатно
Через сертификат Let's Encrypt, который выпускается бесплатно и автоматизирован в большинстве решений. Проще всего поставить обратный прокси Caddy - он получает и продлевает сертификат сам, без отдельных команд. Альтернатива - nginx с плагином certbot, который выпускает сертификат одной командой и настраивает автопродление через системный таймер.
Домен привязан, а сайт не открывается - что проверить
По порядку: dig +short example.com должен вернуть правильный IP, на сервере ss -tlnp должен показывать что-то на портах 80/443, а sudo ufw status - подтверждать, что эти порты разрешены в фаерволе. Один из этих трёх пунктов почти всегда и есть причина.
Коротко
- DNS (какой IP отвечает за имя) и сервер (что показать по этому имени) - независимые настройки; DNS можно прописать до того, как сервер вообще готов.
- IPv4-адрес VPS в WeaselCloud - в личном кабинете, вкладка «Информация о хостинге» на странице услуги.
- У регистратора или DNS-провайдера добавьте A-запись для
@и дляwwwс этим IP; AAAA нужен только если у сервера реально есть IPv6. - Распространение записи обычно занимает от нескольких минут до пары часов, проверяется командой
dig +short домен. - HTTPS проще всего получить через Caddy - сертификат Let's Encrypt выпускается и продлевается автоматически; альтернатива - nginx с certbot, где выпуск сертификата - отдельная ручная команда.
- Если сайт не открывается: сначала проверьте, разошлась ли DNS-запись, потом - слушает ли сервер порт, и только потом - не блокирует ли его фаервол.
Что дальше
- Обзор личного кабинета WeaselCloud - если непонятно, где вообще искать IP-адрес и другие данные сервера.
- Базовый фаервол ufw на VPS - как открыть порты 80 и 443, не оставив сервер полностью открытым.
- PTR и дополнительный IPv4 - если планируете свою почту с этого домена или нужно больше одного IPv4.
- Umami vs Plausible - пример практической задачи, для которой домен и HTTPS обязательны: своя веб-аналитика на VPS.
