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