TürkiyeVPS

Сайт на VPS: настройка Nginx и Let's Encrypt SSL

Направьте домен на VPS, установите Nginx, опубликуйте сайт и получите бесплатный сертификат Let's Encrypt через Certbot. Пошаговое руководство для Ubuntu 24.04.

6 мин чтения

Собственный VPS даёт гораздо больше свободы, чем виртуальный хостинг: вы сами решаете, какое ПО работает на сервере, как устроено кэширование и как обновляются сертификаты. В этом руководстве мы шаг за шагом разберём установку Nginx на Ubuntu 24.04, публикацию первого сайта и получение бесплатного SSL-сертификата Let's Encrypt через Certbot. В итоге у вас будет сайт на VPS, который открывается по HTTPS и сам продлевает сертификат.

Во всех примерах используется домен example.com — замените его на свой. Предполагается, что вы работаете под пользователем с правами sudo.

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

  • VPS с Ubuntu 24.04 и доступом по SSH (если SSH для вас в новинку, загляните в статью Что такое SSH).
  • Доменное имя и доступ к управлению его DNS-записями.
  • Публичный IP-адрес сервера.

Шаг 1. Направьте DNS-записи на сервер

Let's Encrypt проверяет домен, обращаясь к нему по HTTP, поэтому домен должен указывать на ваш сервер до запроса сертификата. Создайте у DNS-провайдера записи:

Тип Имя Значение
A @ IPv4-адрес сервера
A www IPv4-адрес сервера
AAAA @ и www IPv6-адрес (если есть)

Как работает DNS, подробно рассказано в статье Что такое DNS. Проверить, обновились ли записи, можно так:

dig +short example.com A
dig +short www.example.com A
dig +short example.com AAAA

Если в ответе IP вашего сервера — можно продолжать. Пустой ответ или старый IP означает, что нужно немного подождать. Важно: не добавляйте AAAA-запись, если у сервера нет этого IPv6-адреса или Nginx не слушает IPv6, — иначе проверка может уйти не туда.

Шаг 2. Установка Nginx

Обновите список пакетов и установите Nginx:

sudo apt update
sudo apt install -y nginx

Служба запускается автоматически. Проверьте статус:

systemctl status nginx --no-pager

Если видите active (running), то по адресу http://IP_СЕРВЕРА в браузере откроется стандартная страница приветствия Nginx.

Шаг 3. Откройте HTTP и HTTPS в файрволе

Если используете UFW, откройте порты 80 и 443, не забыв про SSH:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status

Профиль Nginx Full открывает сразу 80/tcp и 443/tcp. Никогда не включайте UFW без правила OpenSSH — можно потерять доступ к серверу. Остальные базовые меры защиты собраны в чек-листе Безопасность Linux-сервера.

Шаг 4. Каталог для сайта

Отдельный каталог для каждого сайта упростит размещение нескольких проектов на одном сервере:

sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
echo '<h1>example.com работает</h1>' > /var/www/example.com/html/index.html

Позже сюда можно загрузить файлы сайта через scp, rsync или Git.

Шаг 5. Настройка server block в Nginx

В Nginx каждый сайт описывается блоком server. Создайте файл конфигурации:

sudo nano /etc/nginx/sites-available/example.com

Вставьте:

server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

Активируйте конфигурацию символической ссылкой. Если сайт по умолчанию не нужен, отключите его:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default

После каждого изменения сначала проверяйте конфигурацию, затем перезагружайте:

sudo nginx -t
sudo systemctl reload nginx

Делайте reload только после сообщений syntax is ok и test is successful. Теперь по адресу http://example.com должна открываться ваша страница.

Шаг 6. Бесплатный SSL Let's Encrypt через Certbot

Let's Encrypt — центр сертификации, который бесплатно выдаёт сертификаты сроком на 90 дней. Зачем нужен SSL, мы объясняли в статье Что такое SSL-сертификат. Установите Certbot и плагин для Nginx из репозиториев Ubuntu:

sudo apt install -y certbot python3-certbot-nginx

Примечание: разработчики Certbot рекомендуют snap-пакет с самой свежей версией (sudo snap install --classic certbot). Пакета из репозитория Ubuntu хватает для большинства задач — ставьте что-то одно.

Получите сертификат:

sudo certbot --nginx -d example.com -d www.example.com

При первом запуске Certbot попросит e-mail и согласие с условиями. Затем он проверит домен, выпустит сертификат и добавит в ваш server block директивы listen 443 ssl. Свежие версии Certbot сами добавляют редирект с HTTP на HTTPS; старые задают вопрос — выберите «redirect».

Проверьте результат:

curl -I http://example.com
curl -I https://example.com

Первая команда должна вернуть 301 Moved Permanently с переходом на HTTPS, вторая — 200 OK.

Шаг 7. Проверьте автопродление

Certbot создаёт таймер systemd, который продлевает сертификаты до истечения срока. Проверьте таймер и сымитируйте продление:

systemctl list-timers | grep certbot
sudo certbot renew --dry-run

У snap-версии таймер называется snap.certbot.renew.timer. Если пробный прогон прошёл без ошибок, больше ничего делать не нужно.

Бонус: Nginx как обратный прокси

Если у вас приложение на Node.js, Python или в Docker-контейнере на порту 3000, поставьте перед ним Nginx и завершайте SSL на нём. Замените блок location /:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Заголовки Upgrade и Connection нужны приложениям с WebSocket. Пусть приложение слушает только 127.0.0.1 — тогда порт 3000 будет закрыт снаружи. Если вы только знакомитесь с контейнерами, начните с нашего руководства Установка Docker.

Частые ошибки

Certbot пишет «Timeout during connect» или «Connection refused». Порт 80 недоступен извне. Проверьте файрвол (sudo ufw status) и то, что Nginx слушает порт: sudo ss -tlnp | grep :80.

«NXDOMAIN» или неверный IP. DNS ещё не обновился или настроен неправильно. Повторите dig +short; удалите AAAA-запись, если она указывает на чужой IPv6.

«too many certificates already issued». Вы упёрлись в лимиты Let's Encrypt. Экспериментируйте с --dry-run или --staging и дождитесь сброса лимита.

502 Bad Gateway. При работе через прокси приложение не запущено или слушает другой порт. Проверьте его напрямую: curl http://127.0.0.1:3000, и посмотрите sudo tail -n 50 /var/log/nginx/error.log.

Сайт перестал открываться после правки. Выполните sudo nginx -t — в сообщении обычно указаны файл и номер строки.

Часто задаваемые вопросы

Сертификат Let's Encrypt действительно бесплатный?

Да. Let's Encrypt бесплатно выдаёт сертификаты с проверкой домена (DV). Срок действия — 90 дней, но Certbot продлевает их автоматически, а браузеры доверяют им так же, как платным DV-сертификатам.

Можно ли разместить несколько сайтов на одном VPS?

Да. Для каждого сайта создайте отдельный каталог в /var/www и отдельный server block в /etc/nginx/sites-available, затем выполните certbot --nginx -d ваш-домен для каждого. Ограничение — только RAM и процессор сервера.

Почему Nginx, а не Apache?

Nginx отдаёт статику и держит много одновременных соединений при небольшом расходе памяти, а ещё это самый популярный обратный прокси — на небольшом VPS это заметное преимущество. Если приложение завязано на правила .htaccess, Apache по-прежнему хороший выбор.

Разместите сайт на VPS в Турции

Всё описанное выше спокойно работает даже на самых младших тарифах. VPS от TürkiyeVPS — это сервер в Стамбуле от $0.89 в месяц с Ubuntu 24.04 или Debian 12, полным root-доступом и безлимитным трафиком; сервер создаётся автоматически сразу после подтверждения оплаты. Для нагруженных проектов посмотрите VDS с выделенными vCPU. Если что-то не получается, напишите нам в онлайн-чат на сайте или создайте тикет в поддержку.