SSL-сертифікат на VPS безкоштовно: Nginx, Let's Encrypt і certbot
Щоб безкоштовно отримати SSL-сертифікат для Nginx на VPS, встановіть certbot із плагіном для Nginx і виконайте certbot --nginx -d example.com -d www.example.com --redirect. Certbot випустить сертифікат Let's Encrypt, пропише його в конфігурацію Nginx і налаштує перенаправлення з HTTP на HTTPS, а таймер systemd подовжуватиме його автоматично. Інструкція підходить для Ubuntu 24.04 і Debian 12.
Що знадобиться
- VPS з Ubuntu 24.04 або Debian 12. Обидві системи є серед образів, які можна вибрати під час замовлення або перевстановити з особистого кабінету. Nginx і certbot майже не витрачають пам’яті, тож статичний сайт, зворотний проксі чи застосунок із невеликою базою даних спокійно працюють на Pulse (2 vCPU, 2 ГБ RAM, $10 на місяць).
- Домен, спрямований на сервер. A-запис для
example.comі запис дляwwwуже мають указувати на IP сервера, інакше Let's Encrypt не зможе перевірити домен. Докладніше — як прив’язати домен до VPS. - Root-доступ через SSH. Див. підключення через SSH.
1. Встановіть Nginx
apt update && apt install -y nginx
Якщо користуєтеся ufw, відкрийте HTTP і HTTPS. Порт 80 має залишатися відкритим: через нього Let's Encrypt перевіряє домен під час кожного подовження.
ufw allow 80/tcp
ufw allow 443/tcp
2. Створіть server-блок
Створіть файл /etc/nginx/sites-available/example.com (замініть example.com своїм доменом):
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Додайте тестову сторінку, увімкніть сайт і перезавантажте Nginx:
mkdir -p /var/www/example.com
echo "It works" > /var/www/example.com/index.html
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
curl -I http://example.com
curl має повернути HTTP/1.1 200 OK. Рядок server_name важливий: за ним certbot знаходить блок, який треба змінити.
3. Встановіть certbot
apt install -y certbot python3-certbot-nginx
4. Отримайте сертифікат і ввімкніть редирект
certbot --nginx -d example.com -d www.example.com --redirect
Під час першого запуску certbot запитає адресу електронної пошти й попросить прийняти умови Let's Encrypt. Потім він перевірить домен через HTTP, збереже сертифікат у /etc/letsencrypt/live/example.com/, додасть listen 443 ssl у ваш server-блок і створить перенаправлення з HTTP на HTTPS.
Перевірте результат:
curl -I http://example.com
curl -I https://example.com
Перша команда має повернути 301 Moved Permanently з Location: https://example.com/, друга — 200 OK.
5. Перевірте автоматичне подовження
Сертифікати Let's Encrypt діють недовго (не більше 90 днів), тому подовження має відбуватися саме. Пакет у Debian і Ubuntu встановлює таймер systemd, який запускається двічі на добу й подовжує сертифікати, строк дії яких спливає. Переконайтеся, що таймер активний і подовження справді працює:
systemctl list-timers certbot.timer
certbot renew --dry-run
certbot certificates
--dry-run проходить усе подовження в тестовому середовищі Let's Encrypt, не замінюючи сертифіката. Після справжнього подовження плагін сам перезавантажує Nginx, додаткові хуки не потрібні.
Типові помилки
Timeout during connectабоunauthorized. Домен ще не вказує на цей сервер, або закрито порт 80. Перевіртеdig +short example.comі налаштування брандмауера.Could not automatically find a matching server block. Уserver_nameнемає домену, переданого через-d. Виправте конфігурацію, виконайтеnginx -tі запустіть certbot знову.- Не проходить перевірка
www. Дляwwwнемає DNS-запису. Додайте його або приберіть-d www.example.com. - Забагато невдалих спроб. Let's Encrypt обмежує кількість невдалих перевірок на годину. Спершу усуньте причину, а для перевірки використовуйте
certbot renew --dry-runзамість повторного справжнього запиту.