Заощадьте 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/
  • Введіть ім’я вашого домену
  • Клацніть «Надіслати»
  • Правильно налаштована конфігурація 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 (або завдання cron на старіших системах), яке запускається двічі на день. Він перевіряє, чи будь-які сертифікати знаходяться в межах 30 днів від закінчення, і автоматично їх поновлює.

    Перевірте таймер Systemd

    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 (старіші системи)

    На старіших версіях Ubuntu, які не використовують таймери systemd, перевірте завдання cron 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 перезавантажується автоматично після кожного поновлення, додайте гак розгортання:

    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 дублюючих сертифікатів на тиждень на дом

    Адміністрація Безпека
    Безпека
    Linux Віртуальні сервери