SSL от Let's Encrypt для nginx
Бесплатный DV-сертификат за 30 секунд через certbot. Автообновление настраивается автоматически.
Требования
- nginx уже установлен и работает по HTTP.
- Домен уже указывает A-записью на IP вашего VPS.
- Порт 80 открыт в firewall (для HTTP-01 challenge).
Установка certbot
apt update
apt install certbot python3-certbot-nginx -yПолучить сертификат
Certbot сам изменит конфиг nginx (добавит HTTPS-блок, редирект с HTTP на HTTPS):
certbot --nginx -d example.com -d www.example.com \
-m [email protected] --agree-tos --non-interactive --redirectЧерез 30 секунд вы получите ответ вида Congratulations! Your certificate.... Проверьте: curl -I https://example.com — должен быть 200 OK.
Проверить в SSL Labs
Оцените качество: ssllabs.com/ssltest. Цель — A или A+.
Для A+ обычно нужно добавить в nginx-конфиг:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;Автообновление
certbot сам ставит systemd timer. Проверьте:
systemctl list-timers | grep certbot
# ● certbot.timer — 2 раза в деньТестовый прогон:
certbot renew --dry-runЕсли dry-run прошёл — реальное обновление сработает автоматически.
Wildcard-сертификат (*.example.com)
Wildcard требует DNS-01 challenge — нужен API-токен вашего DNS-провайдера. Пример для Cloudflare:
apt install python3-certbot-dns-cloudflare -y
cat > /root/.cloudflare.ini <<EOF
dns_cloudflare_api_token = <YOUR_TOKEN>
EOF
chmod 600 /root/.cloudflare.ini
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /root/.cloudflare.ini \
-d '*.example.com' -d example.comОшибки
Timeout during connect— порт 80 закрыт firewall-ом или IP не совпадает с DNS.too many failed authorizations— Let's Encrypt рейт-лимит. Ждите час.- DNS не резолвится — проверьте
dig example.com. Если A-запись свежая — подождите несколько минут.