Как подключить SSL Let's Encrypt без сюрпризов
Пошаговая настройка HTTPS для сайта на Nginx и Ubuntu: что проверить до запуска Certbot, как открыть порт 80, пройти проверку домена и убедиться, что сертификат будет продлеваться автоматически.

Подключение SSL-сертификата Let's Encrypt обычно занимает 15–30 минут, но ошибка в DNS, закрытый порт 80 или неверный виртуальный хост остановят выпуск на первом же шаге. Ниже — рабочий сценарий для сайта на Nginx под Ubuntu с Certbot 2.x: к концу вы получите HTTPS, перенаправление с HTTP и проверку автоматического продления.
Что нужно подготовить до начала
Инструкция рассчитана на Ubuntu 22.04 или 24.04, Nginx и домен вроде example.com. Для Apache команды будут другими, а для сайтов за CDN понадобится отдельно проверить, куда указывает DNS.
- SSH-доступ к серверу с правами
sudo; - домен и, при необходимости, поддомен
www.example.com; - запись A для домена, указывающая на публичный IPv4-адрес сервера;
- открытые входящие порты 80 и 443;
- работающий сайт, который уже открывается по HTTP.
Проверьте DNS командой dig +short example.com на своём компьютере или сервере. В ответе должен быть IP вашего сервера. Если используется IPv6 и у домена есть запись AAAA, она тоже должна вести на этот сервер: Let's Encrypt может выбрать IPv6-маршрут, и неправильная запись сломает проверку.
Сноска. ACME — протокол, по которому Certbot подтверждает контроль над доменом и получает сертификат у Let's Encrypt. Сам Certbot не «создаёт доверие», а автоматизирует обмен с центром сертификации.
HTTPS не исправляет неправильный DNS. Он только шифрует соединение с тем сервером, на который в итоге пришёл запрос.
Пошаговая настройка на Nginx
1. Проверьте, что Nginx обслуживает нужный домен
Откройте конфигурацию виртуального хоста и убедитесь, что в директиве server_name указаны реальные имена сайта. Минимальный HTTP-блок выглядит так:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}Замените домены и путь к файлам на свои значения. Проверьте синтаксис и перечитайте конфигурацию:
sudo nginx -t
sudo systemctl reload nginxПроверка: команда nginx -t должна завершиться сообщением syntax is ok, а запрос http://example.com должен открыть именно ваш сайт, а не страницу другого проекта или стандартную заглушку Nginx.
2. Откройте порты 80 и 443
Let's Encrypt чаще всего использует проверку HTTP-01. Центр сертификации обращается к вашему домену по HTTP, поэтому порт 80 должен быть доступен извне даже после включения HTTPS.
Если на сервере включён UFW, добавьте правила:
sudo ufw allow 'Nginx Full'
sudo ufw statusПроверка: в статусе должны присутствовать разрешения для TCP-портов 80 и 443. Если перед сервером стоит облачный firewall, security group, роутер или балансировщик, порты нужно открыть и там.
3. Установите Certbot
Для Ubuntu используйте Certbot 2.x из официального snap-пакета. Такой способ не привязывает обновление клиента к версии пакета в системном репозитории.
sudo snap install core
sudo snap refresh core
sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
certbot --versionЕсли пакет certbot не был установлен через APT, команда удаления может сообщить, что пакет не найден. Это не ошибка настройки. Проверка: последняя команда должна вывести версию Certbot 2.x.
4. Выпустите сертификат и настройте Nginx
Запустите Certbot с плагином для Nginx:
sudo certbot --nginxМастер попросит указать адрес электронной почты, согласиться с условиями Let's Encrypt и выбрать домены. Затем он предложит перенаправлять HTTP-запросы на HTTPS. Для публичного сайта выбирайте перенаправление, если у вас нет отдельной причины сохранять HTTP.
Certbot проверит домен, добавит SSL-настройки в конфигурацию Nginx и перезагрузит сервер. Проверка: откройте https://example.com и проверьте, что браузер не показывает предупреждение о сертификате. Затем выполните:
sudo nginx -t
curl -I http://example.com
curl -I https://example.comДля HTTP-адреса ожидайте ответ 301 или 308 с перенаправлением на HTTPS. Для HTTPS важен успешный ответ от вашего сайта, а не ошибка TLS.
5. Проверьте автоматическое продление
Сертификаты Let's Encrypt действуют 90 дней. Certbot обычно устанавливает systemd-таймер, который регулярно проверяет необходимость продления. Проверить настройку можно безопасным тестовым запуском:
sudo certbot renew --dry-run
systemctl list-timers | grep certbot--dry-run не продлевает боевой сертификат, а проверяет сценарий на тестовой инфраструктуре. Проверка: команда должна завершиться сообщением об успешной симуляции, а в списке таймеров должна быть задача Certbot. Если вы не видите таймер, выясните, как именно установлен пакет, и настройте запуск по официальной документации Certbot, а не добавляйте случайную задачу cron.
Если не получилось
«Timeout during connect» или «Connection refused»
Центр сертификации не достучался до порта 80. Проверьте UFW, правила облачного firewall, проброс портов и наличие процесса Nginx: sudo systemctl status nginx. Если домен указывает на старый IP, сначала исправьте DNS и дождитесь обновления записей.
«DNS problem: NXDOMAIN»
У домена нет такой DNS-записи или вы запрашиваете имя, которое ещё не создано. Проверьте отдельно example.com и www.example.com. Certbot не сможет выпустить один сертификат для поддомена, которого нет в DNS.
«unauthorized» и ответ 404 на путь challenge
Проверка дошла до сервера, но Nginx отдал не тот ответ. Причиной бывает неправильный server_name, другой виртуальный хост по умолчанию, принудительный редирект через прокси или приложение, которое перехватывает путь /.well-known/acme-challenge/. Посмотрите активную конфигурацию командой sudo nginx -T и убедитесь, что домен обслуживается нужным блоком.
Ошибка при повторном запуске создания симлинка
Если Certbot уже установлен, файл /usr/local/bin/certbot может существовать. Проверьте его командой ls -l /usr/local/bin/certbot. Не удаляйте рабочую установку вслепую: сначала выясните, указывает ли ссылка на /snap/bin/certbot, и запускается ли certbot --version.
Что проверить после включения HTTPS
Сертификат решает только задачу шифрования. После его выпуска проверьте сам сайт:
- откройте главную страницу, несколько внутренних страниц и форму входа;
- убедитесь, что изображения, CSS и JavaScript загружаются по HTTPS;
- найдите смешанный контент — ссылки на ресурсы с
http://внутри HTTPS-страницы; - проверьте, что редирект не образует цепочку вроде HTTP → HTTPS → другой домен → HTTPS;
- сохраните дату проверки
certbot renew --dry-runв документации проекта.
Если после включения HTTPS пропали изображения или запросы API, ищите абсолютные HTTP-ссылки в шаблонах, настройках CMS и переменных окружения. Это отдельная задача от выпуска сертификата.
Что делать дальше
Поставьте мониторинг срока действия сертификата и отдельно проверьте продление на тестовом или резервном домене. В продакшене смотрите не только на дату сертификата, но и на успешность systemd-таймера, ответы Nginx после перезагрузки и доступность сайта по IPv4 и IPv6. Если сервером управляет панель хостинга, не смешивайте её автоматическое управление SSL с ручным Certbot: два механизма могут перезаписывать конфигурацию друг друга.
Проверка рекламы на риски: Что в макете вызовет вопросы ФАС: превосходные степени, сравнения, обещания результата, маркировка.
Спросить за 40 ₽Источники: Let's Encrypt: типы проверки домена, Certbot: инструкции по установке и настройке
Частые вопросы
Можно ли выпустить сертификат, если сайт пока не готов?
Нужно ли оставлять открытым порт 80 после подключения HTTPS?
Что будет, если сертификат не продлится вовремя?
Подойдёт ли эта инструкция для Apache или Docker?
Можно ли использовать Let's Encrypt за Cloudflare или другим CDN?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.