Перейти к содержимому
VPS и серверы · 6 мин

SSL-сертификат на VPS бесплатно: Nginx, Let's Encrypt и certbot

Чтобы бесплатно получить SSL-сертификат для Nginx на VPS, установите certbot с плагином для Nginx и выполните certbot --nginx -d example.com -d www.example.com --redirect. Certbot выпустит сертификат Let's Encrypt, пропишет его в конфигурацию Nginx и настроит перенаправление с HTTP на HTTPS, а таймер systemd будет продлевать его автоматически. Инструкция подходит для Ubuntu 24.04 и Debian 12.

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

  • VPS с Ubuntu 24.04 или Debian 12. Обе системы есть среди образов, которые можно выбрать при заказе или переустановить из личного кабинета. Nginx и certbot почти не расходуют память, поэтому статический сайт, реверс-прокси или приложение с небольшой базой данных спокойно работают на Pulse (2 vCPU, 2 ГБ RAM, $10 в месяц).
  • Домен, направленный на сервер. A-запись для example.com и запись для www уже должны указывать на IP сервера, иначе Let's Encrypt не сможет проверить домен. Подробнее — как привязать домен к VPS.
  • Root-доступ по SSH. См. подключение по SSH.

1. Установите Nginx

apt update && apt install -y nginx

Если используете ufw, откройте HTTP и HTTPS. Порт 80 должен оставаться открытым: по нему Let's Encrypt проверяет домен при каждом продлении.

ufw allow 80/tcp
ufw allow 443/tcp

2. Создайте server-блок

Создайте файл /etc/nginx/sites-available/example.com (замените example.com своим доменом):

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html;

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

Добавьте тестовую страницу, включите сайт и перезагрузите Nginx:

mkdir -p /var/www/example.com
echo "It works" > /var/www/example.com/index.html
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
curl -I http://example.com

curl должен вернуть HTTP/1.1 200 OK. Строка server_name важна: по ней certbot находит блок, который нужно изменить.

3. Установите certbot

apt install -y certbot python3-certbot-nginx

4. Получите сертификат и включите редирект

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

При первом запуске certbot спросит адрес электронной почты и попросит принять условия Let's Encrypt. Затем он проверит домен по HTTP, сохранит сертификат в /etc/letsencrypt/live/example.com/, добавит listen 443 ssl в ваш server-блок и создаст перенаправление с HTTP на HTTPS.

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

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

Первая команда должна вернуть 301 Moved Permanently с Location: https://example.com/, вторая — 200 OK.

5. Проверьте автоматическое продление

Сертификаты Let's Encrypt живут недолго (не больше 90 дней), поэтому продление должно идти само. Пакет в Debian и Ubuntu ставит таймер systemd, который запускается дважды в сутки и продлевает сертификаты, срок которых подходит к концу. Убедитесь, что таймер активен и продление действительно работает:

systemctl list-timers certbot.timer
certbot renew --dry-run
certbot certificates

--dry-run проходит всё продление в тестовой среде Let's Encrypt, не заменяя сертификат. После настоящего продления плагин сам перезагружает Nginx, дополнительные хуки не нужны.

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

  • Timeout during connect или unauthorized. Домен ещё не указывает на этот сервер, или закрыт порт 80. Проверьте dig +short example.com и настройки файрвола.
  • Could not automatically find a matching server block. В server_name нет домена, переданного через -d. Исправьте конфигурацию, выполните nginx -t и запустите certbot снова.
  • Не проходит проверка www. Для www нет DNS-записи. Добавьте её или уберите -d www.example.com.
  • Слишком много неудачных попыток. Let's Encrypt ограничивает число неудачных проверок в час. Сначала устраните причину, а для проверки используйте certbot renew --dry-run вместо повторного настоящего запроса.

Заказать Pulse

SSL-сертификат на VPS бесплатно: Nginx, Let's Encrypt и certbot · dedisrv