HTTPS и Let’s Encrypt — бесплатный сертификат
Сайт без HTTPS в 2026 — это «не защищён» в адресной строке, минус позиции в Google, и часть API не работает (geolocation, push, clipboard). Хорошо что HTTPS теперь бесплатно через Let’s Encrypt и ставится одной командой.
Зачем HTTPS
HTTP — открытый текст, любой между тобой и сервером может прочитать (включая wifi-роутер в кафе). HTTPS — шифрование. Для пользовательских паролей и платежей это критично. Плюс: Google ранжирует HTTPS-сайты выше. Плюс: многие новые browser API (геолокация, нотификации, clipboard, service worker) работают ТОЛЬКО по HTTPS. Без него современный сайт — ущербный.
Let’s Encrypt — кто это
Раньше SSL-сертификаты стоили $50-500/год. Let’s Encrypt — некоммерческий центр сертификации который выдаёт сертификаты БЕСПЛАТНО, автоматически, на 90 дней (потом авто-продление). Поддерживается всеми браузерами. Сегодня 80% HTTPS в интернете — Let’s Encrypt.
Certbot — стандартный клиент
Certbot — программа которая разговаривает с Let’s Encrypt и ставит сертификат на твой nginx/apache. Установка на Ubuntu:
Получить и поставить сертификат:
Certbot сам редактирует nginx-конфиг, добавляет редирект с http на https, и настраивает auto-renewal через systemd-таймер. Ставится за 30 секунд.
Авто-продление
Сертификаты Let’s Encrypt живут 90 дней. Certbot ставит systemd-таймер который пытается продлить за 30 дней до истечения, два раза в день. На практике — раз поставил, забыл. Проверить что таймер живёт:
Тестовый прогон:
Если что-то сломалось — увидишь.
Если домен на Cloudflare
Cloudflare даёт свой бесплатный SSL «прокси-сертификат» автоматически — ничего ставить не надо. Включаешь «Full» режим (или Full Strict — лучше) в SSL/TLS настройках. Между Cloudflare и пользователем — Cloudflare-сертификат. Между Cloudflare и твоим сервером — нужен ещё один сертификат на сервере (Let’s Encrypt подойдёт). Без него пакеты будут идти по HTTP в Cloudflare → не Strict.
# === ПРЕДПОСЫЛКИ ===
# 1) DNS уже настроен: example.com и www.example.com → IP сервера
# 2) nginx работает на порту 80, проксирует на твой Next.js
# === УСТАНОВКА CERTBOT ===
sudo apt update
sudo apt install -y certbot python3-certbot-nginx
# === ПОЛУЧИТЬ И ПОСТАВИТЬ СЕРТИФИКАТ ===
sudo certbot --nginx -d example.com -d www.example.com
# Certbot спросит:
# 1) email — для уведомлений об истечении (важно)
# 2) согласие с TOS — A
# 3) хочешь ли email-рассылки от EFF — N
# 4) редирект http → https — REDIRECT (рекомендуется)
# После: certbot отредактирует nginx-конфиг автоматически
# Добавит:
# listen 443 ssl;
# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# И редирект 80 → 443.
# === ПРОВЕРКА ===
curl -I https://example.com
# HTTP/2 200
# Cертификат валиден
# В браузере открой https://example.com — увидишь замочек ✓
# === ПРОДЛЕНИЕ (авто) ===
# Certbot ставит systemd-таймер. Проверь:
sudo systemctl list-timers | grep certbot
# certbot.timer → запускается раз в 12 часов
# Тестовый прогон:
sudo certbot renew --dry-run
# Если без ошибок — настройка ОК.
# === ЕСЛИ ЧТО-ТО СЛОМАЛОСЬ ===
# Посмотреть существующие сертификаты:
sudo certbot certificates
# Удалить:
sudo certbot delete --cert-name example.com
# Поставить заново:
sudo certbot --nginx -d example.com -d www.example.com
# Логи:
sudo journalctl -u certbot.service
sudo cat /var/log/letsencrypt/letsencrypt.log
# === ВРУЧНУЮ ОБНОВИТЬ NGINX-КОНФИГ ===
# Если certbot не сам редактирует (--certonly режим):
sudo certbot certonly --webroot -w /var/www/site -d example.com
# Потом в /etc/nginx/sites-available/site:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://localhost:3000;
# ... остальные proxy_set_header
}
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri; # редирект на HTTPS
}
sudo nginx -t && sudo systemctl reload nginxОт HTTP-сайта до HTTPS за 3 команды