Skip to content

This article is available in Russian. An English version is on the way.Open the Russian page

Сайт на Nginx с бесплатным HTTPS

Установить Nginx, настроить сайт и получить сертификат Let’s Encrypt через Certbot с автопродлением.

Level
Beginner
Reading time
2 min read
Updated
Tested on
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Contents
  1. Установите Nginx
  2. Настройте сайт
  3. Получите сертификат
  4. Автопродление
  5. Проверьте результат
  6. Частые ошибки

Nginx — быстрый веб-сервер, который отдаёт статику и проксирует запросы к приложениям. Сертификат Let’s Encrypt бесплатный, выдаётся на 90 дней и продлевается автоматически.

Установите Nginx

bash
$ apt update$ apt install -y nginx$ systemctl enable --now nginx

Если включён UFW, откройте HTTP и HTTPS:

bash
$ ufw allow 'Nginx Full'

Откройте http://203.0.113.10 — должна появиться стартовая страница Nginx.

Настройте сайт

Создайте каталог сайта и тестовую страницу:

bash
$ 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

Опишите сайт в отдельном файле:

bash
$ nano /etc/nginx/sites-available/example.com
/etc/nginx/sites-available/example.com
server {    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;    }}

Включите сайт и отключите стандартную заглушку:

bash
$ ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/$ rm -f /etc/nginx/sites-enabled/default$ nginx -t && systemctl reload nginx

Получите сертификат

bash
$ apt install -y certbot python3-certbot-nginx$ certbot --nginx -d example.com -d www.example.com

Certbot спросит email для уведомлений об истечении, проверит домен, пропишет сертификат в конфигурацию сайта и добавит редирект с HTTP на HTTPS.

Автопродление

Пакет certbot ставит systemd-таймер, который дважды в сутки проверяет сертификаты и продлевает те, что истекают в ближайшие 30 дней. Проверьте, что всё сработает:

bash
$ systemctl list-timers | grep certbot$ certbot renew --dry-run

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

bash
$ 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.

Read to the end and the article counts toward your learning progress.

  • Nginx
  • HTTPS
  • SSL
  • Let’s Encrypt
  • Certbot
  • сертификат

Was this article helpful?