Nginx — быстрый веб-сервер, который отдаёт статику и проксирует запросы к приложениям. Сертификат Let’s Encrypt бесплатный, выдаётся на 90 дней и продлевается автоматически.
Установите Nginx
$ apt update$ apt install -y nginx$ systemctl enable --now nginxЕсли включён UFW, откройте HTTP и HTTPS:
$ ufw allow 'Nginx Full'Откройте http://203.0.113.10 — должна появиться стартовая страница Nginx.
Настройте сайт
Создайте каталог сайта и тестовую страницу:
$ mkdir -p /var/www/example.com$ echo '<h1>example.com работает</h1>' > /var/www/example.com/index.html$ chown -R www-data:www-data /var/www/example.comОпишите сайт в отдельном файле:
$ nano /etc/nginx/sites-available/example.comserver { listen 80; listen [::]:80; server_name example.com www.example.com; root /var/www/example.com; index index.html; location / { try_files $uri $uri/ =404; }}Включите сайт и отключите стандартную заглушку:
$ ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/$ rm -f /etc/nginx/sites-enabled/default$ nginx -t && systemctl reload nginxПолучите сертификат
$ apt install -y certbot python3-certbot-nginx$ certbot --nginx -d example.com -d www.example.comCertbot спросит email для уведомлений об истечении, проверит домен, пропишет сертификат в конфигурацию сайта и добавит редирект с HTTP на HTTPS.
Автопродление
Пакет certbot ставит systemd-таймер, который дважды в сутки проверяет сертификаты и продлевает те, что истекают в ближайшие 30 дней. Проверьте, что всё сработает:
$ systemctl list-timers | grep certbot$ certbot renew --dry-runПроверьте результат
$ curl -I http://example.com$ curl -I https://example.comПервый запрос должен вернуть 301 с заголовком Location: https://…, второй — 200.
Частые ошибки
- Certbot пишет «Timeout during connect» — закрыт порт 80 в фаерволе или DNS ещё указывает на старый адрес.
nginx -tругается на «duplicate default server» — два сайта сlisten … default_server; оставьте один.- Много неудачных попыток выпуска подряд упираются в лимиты Let’s Encrypt. Для отладки используйте
certbot --dry-run.