Як захистити 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 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Якщо timer активний і включений, автоматичне поновлення вже налаштовано.
Тестування процесу поновлення (пробний запуск)
Перед тим, як покладатися на автоматичне поновлення, змоделюйте його, щоб підтвердити, що все працює:
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"Перегляньте журнали на предмет помилок і усуньте їх відповідно.
Розширене: Посилення конфігурації Nginx SSL
Конфігурація Let's Encrypt + Certbot за замовчуванням безпечна, але ви можете додатково посилити її для отримання оцінки A+ на SSL Labs.
Увімкнути HTTP/2
Відредагуйте блок сервера, щоб увімкнути HTTP/2 для підвищення продуктивності:
listen 443 ssl http2;
listen [::]:443 ssl http2;Додати HSTS (HTTP Strict Transport Security)
HSTS інструює браузери завжди використовувати HTTPS для вашого домену, навіть якщо користувач вводить http://:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;Вимкнути слабкі протоколи та шифри
Додайте ці директиви до вашого nginx.conf або блоку сервера:
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;Після внесення змін завжди перевіряйте та перезавантажуйте:
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 хвилин і коштує нічого.
Давайте повторимо, що ви досягли в цьому посібнику:
- ✅ Встановили Certbot та плагін Nginx
- ✅ Налаштували правильний блок сервера Nginx для вашого домену
- ✅ Отримали надійний SSL-сертифікат Let's Encrypt
- ✅ Перевірили сертифікат за допомогою інструментів браузера, SSL Labs та OpenSSL
- ✅ Підтвердили автоматичне поновлення через systemd timer та тестування dry-run
- ✅ Застосували розширене посилення для рейтингу безпеки A+
Тепер, коли ваш сервер Nginx захищений, розгляньте можливість дослідження додаткових рівнів захисту: Web Application Firewall (WAF), fail2ban для захисту від brute-force атак та регулярні аудити безпеки. Якщо ви керуєте кількома доменами або додатками, VPS Control Panels AlexHost забезпечують спрощений інтерфейс для керування SSL-сертифікатами, віртуальними хостами та конфігураціями сервера без втрати гнучкості середовища Linux.
Ваші користувачі заслуговують на безпечне з’єднання. Тепер у них воно є.
на всіх хостингових послугах