Центр помощи

Пошаговые руководства по серверам, сетям и аккаунту.

Linux-сервер

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

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

Любой публичный сайт должен работать по 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.

Помог ли вам данный ответ?
Центр помощи
Linux-сервер Вход по SSH-ключу в Linux: настройка ключей ed25519 и отключение входа по паролю Любой сервер с публичным IPv4 через несколько минут после запуска начинают атаковать боты, перебирающие SSH-пароли. В этой инструкции… Linux-сервер Как безопасно сменить порт SSH и пароль root на Linux VPS Перенос SSH с порта 22 не остановит целенаправленную атаку, но уберёт из логов большую часть автоматического сканирования, а смена пароля… Linux-сервер Настройка файрвола в Linux: UFW и firewalld на VPS (IPv4 и IPv6) Только что установленный Linux-сервер отвечает на любом порту, который открыла какая-либо служба, поэтому файрвол — одна из первых вещей,… Linux-сервер Как добавить swap на Linux VPS (тарифы с 512 МБ и 1 ГБ ОЗУ) На облачном сервере с 512 МБ или 1 ГБ ОЗУ база данных, пул PHP-FPM и обновление пакетов легко исчерпывают память одновременно. Тогда OOM… Linux-сервер Диск заполнен в Linux: как найти и освободить место на VPS Ошибка «No space left on device» ломает на сервере почти всё: базы данных перестают писать, сайты отдают ошибки, обновления пакетов не…
AlipayUnionPayVISAMastercardPayPalUSDTstripe