Бесплатный SSL-сертификат для сайта: размещение сайта на Nginx с Let's Encrypt (Certbot) в Linux

12 мин чтения 3 просмотров 0
Содержание

Любой публичный сайт должен работать по HTTPS, а бесплатный SSL-сертификат Let's Encrypt делает это простым. В инструкции показано, как разместить сайт на облачном или выделенном сервере JUSTG с Nginx, выпустить сертификат Let's Encrypt через certbot, проверить автоматическое продление и включить принудительный HTTPS. Команды приведены для Debian/Ubuntu и CentOS/Rocky Linux/AlmaLinux. В примере домен example.com и IP сервера 203.0.113.10 — замените их на свои.

Шаг 1: Направьте домен на сервер JUSTG (записи A и AAAA)

У регистратора или DNS-провайдера создайте A-записи для основного домена и www, указывающие на IPv4 сервера. Облачные серверы JUSTG также получают бесплатный IPv6; добавляйте AAAA-запись, только если IPv6 настроен на сервере и Nginx его слушает. Дождитесь, пока записи начнут резолвиться, прежде чем запрашивать сертификат: Let's Encrypt проверяет домен через интернет.

# A    example.com       -> 203.0.113.10
# A    www.example.com   -> 203.0.113.10
# AAAA example.com       -> 2001:db8::10   (optional, only if IPv6 is configured)

# check from the server (Debian/Ubuntu: apt install -y dnsutils, Rocky: dnf install -y bind-utils)
dig +short example.com A
dig +short www.example.com A
dig +short example.com AAAA

Шаг 2: Установите Nginx и certbot в Debian или Ubuntu

Плагин certbot для Nginx умеет сам править конфигурацию Nginx. Установите все из стандартных репозиториев:

apt update
apt install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx
ufw allow 'Nginx Full'     # if UFW is enabled

Шаг 3: Установите Nginx и certbot в Rocky Linux, AlmaLinux или CentOS

В системах на базе RHEL certbot берется из репозитория EPEL. Также откройте HTTP и HTTPS в firewalld:

dnf install -y epel-release
dnf install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload

Шаг 4: Создайте сайт и блок server в Nginx

Создайте корневой каталог с тестовой страницей. В системах с SELinux команда restorecon гарантирует, что Nginx сможет читать файлы.

mkdir -p /var/www/example.com
echo '<h1>example.com is online</h1>' > /var/www/example.com/index.html
restorecon -Rv /var/www/example.com    # Rocky/Alma/CentOS with SELinux only

Затем добавьте блок server для домена:

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;
    }
}

Сохраните его в нужное для вашего дистрибутива место, проверьте синтаксис и перезагрузите Nginx:

# Debian / Ubuntu: save as /etc/nginx/sites-available/example.com, then
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# CentOS / Rocky / AlmaLinux: save as /etc/nginx/conf.d/example.com.conf

nginx -t && systemctl reload nginx
curl -I http://example.com

Если curl -I возвращает 200 OK, сайт доступен по HTTP и можно получать сертификат.

Шаг 5: Получите бесплатный SSL Let's Encrypt командой certbot --nginx

Запустите certbot, перечислив все доменные имена для сертификата. При первом запуске он попросит e-mail для уведомлений об истечении срока и согласие с условиями Let's Encrypt. Ключ --redirect добавляет автоматический редирект с HTTP на HTTPS.

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

certbot подтверждает владение доменом через временный файл, который отдает Nginx, устанавливает сертификат в блок server и перезагружает Nginx.

Шаг 6: Проверьте автоматическое продление

Сертификаты Let's Encrypt действуют недолго, поэтому продление должно быть автоматическим. Пробный запуск проверяет весь процесс, не трогая реальный сертификат:

certbot renew --dry-run

# Debian / Ubuntu: the timer is enabled by the package
systemctl list-timers | grep certbot

# Rocky / AlmaLinux (EPEL): enable the renewal timer once
systemctl enable --now certbot-renew.timer

Если пробный запуск прошел успешно и таймер активен, больше ничего делать не нужно.

Шаг 7: Включите принудительный HTTPS и проверьте результат

Если вы не использовали --redirect, включите HTTPS вручную: замените блок для порта 80 редиректом, оставив блок HTTPS, созданный certbot:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Перезагрузите Nginx и проверьте:

curl -I http://example.com      # expect 301 to https://
curl -I https://example.com     # expect 200
certbot certificates

Альтернатива: SSL в один клик в aaPanel

Если на сервере установлена aaPanel, ручные шаги можно пропустить. Добавьте сайт в разделе Website, откройте его настройки, перейдите в раздел SSL, выберите Let's Encrypt, отметьте доменные имена и примените. Затем включите переключатель Force HTTPS. aaPanel продлевает сертификат автоматически. DNS-записи из шага 1 по-прежнему нужны.

Частые вопросы

certbot завершается ошибкой соединения или тайм-аутом. Что проверить?

Убедитесь, что записи A и AAAA указывают на этот сервер, порты 80 и 443 открыты в UFW или firewalld и Nginx запущен. Неверная AAAA-запись — частая причина, так как проверка может идти по IPv6.

Можно ли одним сертификатом покрыть несколько доменов?

Да. Добавьте в команду certbot дополнительные ключи -d; каждое имя должно указывать на сервер.

Нужно ли перезапускать Nginx после продления?

Нет. Плагин certbot для Nginx сам перезагружает Nginx после успешного продления.

Если проблему решить не удалось, создайте тикет в техническую поддержку JUSTG.

Помог ли вам данный ответ?

Похожие руководства

root@vps: ~ $ ssh-keygen -t ed25519 -C "laptop-2026"$ ssh-copy-id -i ~/.ssh/id_ed25519.pub root@203…$ ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 … Linux-сервер Вход по SSH-ключу в Linux: настройка ключей ed25519 и отключение входа по паролю Как настроить вход по SSH-ключу ed25519 на Linux VPS, права authorized_keys и безопасно отключить вход по паролю. 14 мин чтения 7 Читать root@vps: ~ $ openssl rand -base64 18$ passwd root$ ss -tlnp | grep ':2222' || echo "port 2222 is… Linux-сервер Как безопасно сменить порт SSH и пароль root на Linux VPS Смена порта SSH и пароля root в Linux: sshd_config, SELinux semanage, UFW/firewalld, ssh.socket в Ubuntu и откат через VNC. 15 мин чтения 6 Читать root@vps: ~ $ ss -tulpn$ sshd -T | grep -i '^port'$ nohup sh -c 'sleep 600; ufw disable' >/dev/nu… Linux-сервер Настройка файрвола в Linux: UFW и firewalld на VPS (IPv4 и IPv6) Настройка файрвола Linux через UFW или firewalld: сначала SSH, веб-порты, доступ по IP, IPv6 и восстановление доступа. 16 мин чтения 7 Читать root@vps: ~ $ free -h$ swapon --show$ df -h / Linux-сервер Как добавить swap на Linux VPS (тарифы с 512 МБ и 1 ГБ ОЗУ) Добавление swap на Linux VPS с малым объёмом ОЗУ: файл подкачки через fallocate или dd, fstab и настройка swappiness. 12 мин чтения 7 Читать