Перейти до вмісту
VPS і сервери · 6 хв

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 замість повторного справжнього запиту.

Замовити Pulse

SSL-сертифікат на VPS безкоштовно: Nginx, Let's Encrypt і certbot · dedisrv