Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код: Skills Начать
Рубрики
Linux Безопасность

Как защитить Nginx с помощью Let’s Encrypt SSL на Ubuntu (Полное руководство 2025)

HTTPS больше не является опциональным. В 2025 году каждому веб-сайту нужно SSL/TLS шифрование — не только для защиты данных пользователей, но и для конкурентного ранжирования в Google Search и соответствия требованиям безопасности современных браузеров. Let’s Encrypt делает это достижимым бесплатно, предлагая надежные, автоматически обновляемые SSL сертификаты, которые работают безупречно с Nginx на Ubuntu.

Это подробное руководство проведет вас через каждый шаг: установка Certbot, получение SSL сертификата Let’s Encrypt, проверка конфигурации и автоматизация обновлений — все на сервере Ubuntu 18.04, 20.04 или 22.04 с Nginx.

Независимо от того, управляете ли вы средой VPS Hosting или выделенным веб-сервером, это руководство дает вам готовую к использованию в производстве конфигурацию HTTPS менее чем за 15 минут.

Почему SSL важен для Nginx в 2025

Прежде чем переходить к командам, стоит понять, что вы получаете, защитив Nginx с помощью Let's Encrypt:

  • Шифрование данных: HTTPS шифрует весь трафик между вашим сервером и посетителями, предотвращая атаки «человек посередине» и подслушивание.
  • Сигналы рейтинга SEO: Google подтвердил HTTPS как фактор ранжирования. Сайты без SSL активно штрафуются в результатах поиска.
  • Индикаторы доверия браузера: Chrome, Firefox и Edge отображают предупреждения "Небезопасно" для сайтов HTTP, разрушая доверие пользователей и увеличивая показатели отказов.
  • Бесплатно и автоматизировано: Let's Encrypt выдает сертификаты бесплатно, а Certbot автоматически обрабатывает продления — устраняя ручные затраты на платные сертификаты.
  • PCI DSS и соответствие: Любой сайт, обрабатывающий платежи или личные данные, по закону обязан использовать зашифрованные соединения.

Если ваш домен уже зарегистрирован и указывает на ваш сервер, вы готовы начать. Если вам все еще нужен домен, AlexHost предлагает доступную Регистрацию доменов с мгновенным управлением DNS.

Предварительные условия

Убедитесь, что выполнены следующие условия перед началом:

ТребованиеДетали
Операционная системаUbuntu 18.04, 20.04 или 22.04 LTS
Веб-серверNginx установлен и активно обслуживает ваш сайт
Доменное имяЗарегистрированный домен с A-записью, указывающей на публичный IP вашего сервера
Доступ к серверуSSH доступ с пользователем, имеющим sudo привилегии
БрандмауэрПорты 80 (HTTP) и 443 (HTTPS) открыты в UFW или iptables
Доступ rootНе требуется строго, но sudo доступ обязателен

Проверьте, что Nginx запущен

Перед установкой Certbot подтвердите, что Nginx активен:

sudo systemctl status nginx

Вы должны увидеть active (running) в выводе. Если Nginx не установлен, выполните:

sudo apt update && sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

Откройте необходимые порты брандмауэра

Если UFW включен, разрешите трафик HTTP и HTTPS:

sudo ufw allow 'Nginx Full'
sudo ufw reload
sudo ufw status

Вывод должен показать Nginx Full как ALLOW для IPv4 и IPv6.

Шаг 1 — Установка Certbot и плагина Nginx

Certbot — это официальный клиент Let's Encrypt. Он автоматизирует весь жизненный цикл сертификата: выдачу, установку и обновление. Плагин python3-certbot-nginx позволяет Certbot читать вашу конфигурацию Nginx и изменять её автоматически.

Обновите индекс пакетов

Всегда обновляйте списки пакетов перед установкой нового программного обеспечения:

sudo apt update
sudo apt upgrade -y

Установите Certbot с плагином Nginx

sudo apt install certbot python3-certbot-nginx -y

Проверьте установку

certbot --version

Ожидаемый результат (версия может отличаться):

certbot 2.x.x

> Примечание для пользователей Ubuntu 18.04: Если версия Certbot по умолчанию в APT устарела, установите через Snap для получения последней версии:

> “`bash

> sudo snap install –classic certbot

> sudo ln -s /snap/bin/certbot /usr/bin/certbot

> “`

Шаг 2 — Настройка блока сервера Nginx

Certbot должен обнаружить ваш домен в конфигурации Nginx, чтобы автоматически его изменить. Если вы еще не создали блок сервера для вашего домена, создайте его сейчас.

Создание блока сервера

Замените yourdomain.com на ваше фактическое имя домена во всем этом руководстве:

sudo nano /etc/nginx/sites-available/yourdomain.com

Добавьте следующую базовую конфигурацию:

server {
    listen 80;
    listen [::]:80;

    server_name yourdomain.com www.yourdomain.com;

    root /var/www/yourdomain.com/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Включение блока сервера

sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/

Проверка конфигурации Nginx

Всегда проверяйте конфигурацию Nginx перед перезагрузкой:

sudo nginx -t

Ожидаемый результат:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезагрузка Nginx

sudo systemctl reload nginx

Шаг 3 — Получение SSL-сертификата Let’s Encrypt

С настроенным Nginx и установленным Certbot вы можете запросить SSL-сертификат.

Запуск Certbot с плагином Nginx

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

Объяснение флагов:

    --nginx — указывает Certbot использовать плагин Nginx для автоматической конфигурации
    -d yourdomain.com — указывает основной домен
    -d www.yourdomain.com — добавляет поддомен www в один сертификат (Subject Alternative Name)
    
    Объяснение интерактивных подсказок
    Certbot проведет вас через краткий мастер установки:
    1. Адрес электронной почты
    Enter email address (used for urgent renewal and security notices):
    Укажите действительный адрес электронной почты. Let’s Encrypt использует его для уведомления об истечении сертификатов и проблемах безопасности.
    2. Условия обслуживания
    Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf
    (A)gree/(C)ancel:
    Введите A и нажмите Enter.
    3. Рассылка EFF (опционально)
    Would you be willing to share your email address with the Electronic Frontier Foundation?
    (Y)es/(N)o:
    Это опционально. Введите N, если вы не хотите подписываться.
    4. Перенаправление HTTP на HTTPS
    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
    1: No redirect
    2: Redirect - Make all requests redirect to secure HTTPS access
    Всегда выбирайте вариант 2. Это гарантирует, что все посетители автоматически перейдут на HTTPS, устраняя проблемы со смешанным контентом и повышая безопасность.
    Успешный результат
    Если все настроено правильно, вы увидите:
    Successfully received certificate.
    Certificate is saved at: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    Key is saved at:         /etc/letsencrypt/live/yourdomain.com/privkey.pem
    This certificate expires on YYYY-MM-DD.
    These files will be updated when the certificate renews.
    
    Deploying certificate
    Successfully deployed certificate for yourdomain.com to /etc/nginx/sites-available/yourdomain.com
    Successfully deployed certificate for www.yourdomain.com to /etc/nginx/sites-available/yourdomain.com
    Congratulations! You have successfully enabled HTTPS on https://yourdomain.com and https://www.yourdomain.com
    Что Certbot изменил в Nginx
    После запуска Certbot автоматически добавляет SSL-директивы в ваш блок сервера. Ваша конфигурация теперь будет выглядеть примерно так:
    server {
        server_name yourdomain.com www.yourdomain.com;
    
        root /var/www/yourdomain.com/html;
        index index.html index.htm;
    
        location / {
            try_files $uri $uri/ =404;
        }
    
        listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    }
    
    server {
        if ($host = www.yourdomain.com) {
            return 301 https://$host$request_uri;
        }
        if ($host = yourdomain.com) {
            return 301 https://$host$request_uri;
        }
    
        listen 80;
        server_name yourdomain.com www.yourdomain.com;
        return 404;
    }
    Шаг 4 — Проверка установки SSL
    После завершения работы Certbot проверьте, что ваш SSL-сертификат правильно установлен и функционирует.
    Метод 1: Проверка в браузере
    Откройте веб-браузер и перейдите на https://yourdomain.com. Ищите:
    
    Значок замка в адресной строке — подтверждает активное, доверенное SSL-соединение
    Отсутствие предупреждений о безопасности — сертификат действителен и доверен вашим браузером
    HTTPS в URL — HTTP-запросы должны автоматически перенаправляться на HTTPS
    
    Нажмите на значок замка и выберите «Сертификат», чтобы просмотреть издателя (должно отображаться «Let’s Encrypt») и дату истечения.
    Метод 2: Глубокий анализ SSL Labs
    Для комплексного аудита безопасности используйте Qualys SSL Labs:
    
    Перейдите на https://www.ssllabs.com/ssltest/
  • Введите имя вашего домена
  • Нажмите «Submit»
  • Правильно настроенная установка Let’s Encrypt + Nginx должна получить оценку A или A+. Если вы получили более низкую оценку, SSL Labs определит конкретные слабые места для исправления.

    Метод 3: Проверка из командной строки

    Проверьте детали сертификата непосредственно из терминала:

    sudo certbot certificates

    Результат:

    Found the following certs:
      Certificate Name: yourdomain.com
        Serial Number: abc123...
        Key Type: RSA
        Domains: yourdomain.com www.yourdomain.com
        Expiry Date: YYYY-MM-DD HH:MM:SS+00:00 (VALID: 89 days)
        Certificate Path: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
        Private Key Path: /etc/letsencrypt/live/yourdomain.com/privkey.pem

    Метод 4: Команда OpenSSL

    Проверьте цепочку сертификатов и срок действия с помощью OpenSSL:

    echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -dates -issuer

    Ожидаемый результат:

    notBefore=Mon Jan  1 00:00:00 2025 GMT
    notAfter=Tue Apr  1 00:00:00 2025 GMT
    issuer=C=US, O=Let's Encrypt, CN=R11

    Шаг 5 — Настройка автоматического обновления сертификата

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

    Как работает обновление Certbot

    При установке Certbot через APT или Snap он автоматически создает systemd timer (или cron job на старых системах), который запускается дважды в день. Он проверяет, находятся ли какие-либо сертификаты в пределах 30 дней до истечения срока, и автоматически их обновляет.

    Проверка Systemd Timer

    sudo systemctl status certbot.timer

    Ожидаемый результат:

    ● certbot.timer - Run certbot twice daily
         Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
         Active: active (waiting) since ...
        Trigger: ...
       Triggers: ● certbot.service

    Если таймер активен и включен, автоматическое обновление уже настроено.

    Тестирование процесса обновления (пробный запуск)

    Перед тем как полагаться на автоматическое обновление, смоделируйте его, чтобы убедиться, что все работает:

    sudo certbot renew --dry-run

    Успешный результат:

    Simulating renewal of an existing certificate for yourdomain.com and www.yourdomain.com
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Congratulations, all simulated renewals succeeded:
      /etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Если пробный запуск успешен, ваши сертификаты будут обновляться автоматически без каких-либо ручных операций.

    Проверка Cron Job (старые системы)

    На старых версиях Ubuntu, которые не используют systemd timers, проверьте наличие cron job Certbot:

    sudo cat /etc/cron.d/certbot

    Вы должны увидеть строку, похожую на:

    0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

    Это запускает Certbot дважды в день в случайные интервалы, чтобы избежать перегрузки серверов Let's Encrypt.

    Ручное обновление (если необходимо)

    Если вам когда-либо потребуется вручную принудительно обновить сертификат:

    sudo certbot renew --force-renewal
    sudo systemctl reload nginx

    > Лучшая практика: После любого обновления сертификата (ручного или автоматического) перезагрузите Nginx, чтобы убедиться, что он подхватит новые файлы сертификата:

    > “`bash

    > sudo systemctl reload nginx

    > “`

    > Хуки обновления Certbot обрабатывают это автоматически в большинстве конфигураций.

    Настройка хуков обновления

    Чтобы убедиться, что Nginx перезагружается автоматически после каждого обновления, добавьте deploy hook:

    sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

    Добавьте следующее содержимое:

    #!/bin/bash
    systemctl reload nginx

    Сделайте его исполняемым:

    sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

    Устранение распространенных проблем

    Ошибка: "Could not bind to IPv4/IPv6"

    Certbot использует порт 80 для проверки домена. Если другой процесс использует порт 80, проверка не пройдет.

    Решение: Временно остановите Nginx, получите сертификат в автономном режиме, затем перезагрузите:

    sudo systemctl stop nginx
    sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
    sudo systemctl start nginx

    Ошибка: "DNS problem: NXDOMAIN looking up A for yourdomain.com"

    DNS-записи вашего домена еще не распространяются на серверы проверки Let's Encrypt.

    Решение: Проверьте, что ваша A-запись установлена правильно:

    dig yourdomain.com A +short

    Результат должен вернуть публичный IP-адрес вашего сервера. Распространение DNS может занять до 48 часов, хотя обычно разрешается в течение 1–2 часов.

    Ошибка: "Too many certificates already issued"

    Let's Encrypt применяет ограничение на 5 дублирующихся сертификатов в неделю на домен.

    Решение: Используйте флаг --staging для тестирования вашей конфигурации без превышения лимитов:

    sudo certbot --nginx --staging -d yourdomain.com -d www.yourdomain.com

    После завершения тестирования отозвите промежуточный сертификат и выпустите производственный.

    Ошибка: "Nginx configuration test failed"

    Certbot изменяет вашу конфигурацию Nginx. Если полученная конфигурация содержит синтаксические ошибки, Nginx не перезагрузится.

    Решение: Вручную протестируйте и исправьте конфигурацию:

    sudo nginx -t
    sudo nano /etc/nginx/sites-available/yourdomain.com
    # Fix any syntax errors, then:
    sudo systemctl reload nginx

    Сертификат не обновляется автоматически

    Если вы получаете письма об истечении срока действия несмотря на установленный Certbot, проверьте статус таймера:

    sudo systemctl status certbot.timer
    sudo journalctl -u certbot.service --since "7 days ago"

    Проверьте журналы на наличие ошибок и устраните их соответственно.

    Advanced: Hardening Your Nginx SSL Configuration

    The default Let's Encrypt + Certbot configuration is secure, but you can further harden it for an A+ SSL Labs score.

    Enable HTTP/2

    Edit your server block to enable HTTP/2 for improved performance:

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    Add HSTS (HTTP Strict Transport Security)

    HSTS instructs browsers to always use HTTPS for your domain, even if a user types http://:

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    Disable Weak Protocols and Ciphers

    Add these directives to your nginx.conf or server block:

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    After making changes, always test and reload:

    sudo nginx -t && sudo systemctl reload nginx

    Выбор правильного хостинга для вашей настройки Nginx + SSL

    Производительность и надежность вашего SSL-защищенного сервера Nginx во многом зависят от базовой инфраструктуры. Вот как варианты хостинга AlexHost соответствуют различным случаям использования:

    • VPS Hosting — Идеален для большинства веб-сайтов и приложений. Полный доступ root позволяет вам настроить Nginx и Certbot точно так, как описано в этом руководстве. VPS планы AlexHost работают на Ubuntu 18.04, 20.04 и 22.04 LTS.
    • Dedicated Servers — Лучший выбор для высоконагруженных веб-сайтов, требующих максимальной производительности, выделенных ресурсов и полного контроля над оборудованием. Запускайте несколько виртуальных хостов Nginx, каждый с собственным сертификатом Let’s Encrypt.
    • VPS с cPanel — Если вы предпочитаете графический интерфейс для управления SSL-сертификатами наряду с веб-хостингом, cPanel интегрируется с Let’s Encrypt и обрабатывает выдачу сертификатов через функцию AutoSSL.
    • SSL Certificates — Для корпоративных сред, сайтов электронной коммерции или приложений, требующих сертификатов с расширенной проверкой (EV) или проверкой организации (OV), AlexHost предлагает премиум SSL-сертификаты с гарантией покрытия и поддержкой.

    Заключение

    Защита Nginx с помощью SSL-сертификата Let's Encrypt на Ubuntu — один из наиболее эффективных шагов, которые вы можете предпринять для защиты своих пользователей, улучшения рейтинга в поисковых системах и завоевания доверия аудитории. Весь процесс — от установки Certbot до включения автоматического обновления — занимает менее 15 минут и ничего не стоит.

    Вот краткое резюме того, что вы выполнили в этом руководстве:

    1. ✅ Установили Certbot и плагин Nginx
    2. ✅ Настроили правильный блок сервера Nginx для вашего домена
    3. ✅ Получили доверенный SSL-сертификат Let's Encrypt
    4. ✅ Проверили сертификат с помощью инструментов браузера, SSL Labs и OpenSSL
    5. ✅ Подтвердили автоматическое обновление через systemd timer и тестирование в режиме dry-run
    6. ✅ Применили продвинутое усиление безопасности для рейтинга A+

    Теперь, когда ваш сервер Nginx защищен, рассмотрите возможность изучения дополнительных уровней защиты: Web Application Firewall (WAF), fail2ban для защиты от перебора паролей и регулярные аудиты безопасности. Если вы управляете несколькими доменами или приложениями, VPS Control Panels AlexHost предоставляют упрощенный интерфейс для управления SSL-сертификатами, виртуальными хостами и конфигурациями сервера без ущерба для гибкости среды Linux.

    Ваши пользователи заслуживают безопасное соединение. Теперь оно у них есть.