15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
30.10.2024

Як налаштувати SSL сертифікат в Nginx: Повний покроковий посібник

Захист вашого веб-сайту за допомогою SSL/TLS сертифіката більше не є необов’язковим — це фундаментальна вимога для довіри користувачів, захисту даних та позицій у пошукових системах. Google явно використовує HTTPS як сигнал ранжування з 2014 року, а сучасні браузери активно попереджають відвідувачів, коли сайт не має шифрування. Якщо ви використовуєте Nginx як веб-сервер, цей посібник проведе вас через усе необхідне для встановлення, налаштування та автоматизації управління SSL сертифікатами за допомогою Certbot та Let’s Encrypt.

Незалежно від того, чи керуєте ви середовищем VPS Хостингу, виділеним сервером або планом спільного хостингу, правильно налаштований SSL є обов’язковим для будь-якого виробничого веб-сайту.

Що таке SSL сертифікат і навіщо він потрібен Nginx?

SSL (Secure Sockets Layer) сертифікат — сьогодні точніше іменований як TLS (Transport Layer Security) сертифікат — встановлює зашифроване з’єднання між вашим веб-сервером і браузером відвідувача. Це шифрування гарантує, що конфіденційні дані, такі як облікові дані для входу, платіжна інформація та особисті дані, не можуть бути перехоплені зловмисними третіми сторонами.

Зокрема для Nginx, налаштування SSL включає:

  • Файли сертифіката: Публічний ланцюжок сертифікатів, виданий Центром сертифікації (CA)
  • Приватний ключ: Криптографічно згенерований ключ, що безпечно зберігається на вашому сервері
  • Директиви серверного блоку: Інструкції конфігурації Nginx, що прив’язують сертифікат до вашого домену

Без SSL ваш сайт обслуговується через HTTP, що означає передачу всього трафіку у відкритому тексті. При правильно налаштованому SSL ваш сайт використовує HTTPS — зашифрований, автентифікований і довірений браузерами та пошуковими системами.

> Порада: Якщо ви оцінюєте варіанти хостингу, AlexHost пропонує SSL Сертифікати для доменів усіх типів, включаючи сертифікати з перевіркою домену (DV), перевіркою організації (OV) та розширеною перевіркою (EV).

Передумови перед початком роботи

Перш ніж переходити до кроків налаштування, переконайтеся, що виконані такі умови:

  • Працюючий веб-сервер Nginx на системі на базі Linux (рекомендується Ubuntu 20.04/22.04 або Debian)
  • Root або sudo доступ до вашого сервера
  • Зареєстроване доменне ім’я, що вказує на IP-адресу вашого сервера через DNS A записи — ви можете зареєструвати його через Реєстрацію доменів
  • Відкриті порти брандмауера: TCP порти 80 (HTTP) та 443 (HTTPS) мають бути доступні
  • Не-root користувач з привілеями sudo (найкраща практика для безпеки сервера)

Ви можете перевірити, що Nginx працює, за допомогою:

sudo systemctl status nginx

І підтвердити правильне розпізнавання вашого домену за допомогою:

dig yourdomain.com +short

Крок 1: Встановлення Certbot на ваш сервер

Certbot — це офіційний клієнт з відкритим вихідним кодом для Let’s Encrypt — безкоштовного, автоматизованого та широко довіреного Центру сертифікації. Він обробляє весь процес видачі сертифікатів, включаючи перевірку домену та оновлення конфігурації Nginx.

Оновлення індексу пакетів

Завжди починайте з оновлення списків пакетів, щоб переконатися, що ви встановлюєте останні доступні версії:

sudo apt update && sudo apt upgrade -y

Встановлення Certbot та плагіна Nginx

Плагін python3-certbot-nginx дозволяє Certbot безпосередньо читати та змінювати файли конфігурації Nginx, автоматизуючи більшу частину процесу налаштування:

sudo apt install certbot python3-certbot-nginx -y

Перевірка встановлення

Підтвердіть успішне встановлення Certbot, перевіривши його версію:

certbot --version

Ви повинні побачити вивід, подібний до certbot 2.x.x.

Крок 2: Дозвіл HTTPS трафіку через брандмауер

Якщо ви використовуєте UFW (Uncomplicated Firewall), вам потрібно явно дозволити HTTPS трафік перед продовженням:

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
sudo ufw status

Профіль Nginx Full дозволяє як HTTP (порт 80), так і HTTPS (порт 443). Видалення окремого правила HTTP гарантує, що після налаштування SSL ви не залишаєте непотрібні порти відкритими без мети.

Крок 3: Отримання SSL сертифіката від Let’s Encrypt

Після встановлення Certbot та налаштування брандмауера ви можете запросити сертифікат. Прапор --nginx вказує Certbot використовувати плагін Nginx, який автоматично обробляє перевірку ACME challenge та оновлює конфігурацію вашого сервера.

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

Що відбувається під час цього процесу?

  1. Перевірка права власності на домен: Certbot тимчасово змінює вашу конфігурацію Nginx для обслуговування файлу challenge, доводячи Let’s Encrypt, що ви контролюєте домен
  2. Видача сертифіката: Let’s Encrypt видає підписаний сертифікат, дійсний протягом 90 днів
  3. Автоматична конфігурація Nginx: Certbot оновлює серверний блок Nginx для використання нових файлів сертифіката

Інтерактивні підказки

Під час процесу Certbot запитає:

  • Адресу електронної пошти для термінових повідомлень про поновлення та безпеку
  • Згоду з Умовами надання послуг
  • Чи перенаправляти HTTP на HTTPS — завжди вибирайте варіант 2 (Redirect) для примусового використання HTTPS на всьому сайті

Ваші сертифікати будуть збережені в:

/etc/letsencrypt/live/yourdomain.com/

Ключові файли:

ФайлПризначення
fullchain.pemВаш сертифікат + проміжний ланцюжок
privkey.pemВаш приватний ключ (зберігайте в таємниці)
cert.pemЛише ваш доменний сертифікат
chain.pemЛише проміжні сертифікати

Крок 4: Ручне налаштування Nginx для SSL (Розширений рівень)

Хоча Certbot автоматизує більшу частину конфігурації, розуміння ручного налаштування дає вам повний контроль над вашою реалізацією SSL — що є необхідним для налаштування продуктивності, посилення безпеки та користувацьких розгортань.

Відкриття конфігурації серверного блоку Nginx

sudo nano /etc/nginx/sites-available/yourdomain.com

Якщо ви використовуєте файл конфігурації за замовчуванням:

sudo nano /etc/nginx/sites-available/default

Повна конфігурація серверного блоку SSL

Замініть або оновіть вашу конфігурацію наступним захищеним прикладом:

# Redirect all HTTP traffic to HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

# HTTPS server block
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    # SSL Certificate Paths
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    # Recommended SSL parameters
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # Security Headers
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header Referrer-Policy "no-referrer-when-downgrade";

    # Document root and index
    root /var/www/yourdomain.com/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Пояснення ключових директив конфігурації

  • ssl_protocols TLSv1.2 TLSv1.3: Вимикає старіші, вразливі протоколи (SSLv3, TLS 1.0, TLS 1.1)
  • ssl_ciphers: Визначає надійний набір шифрів з пріоритетом прямої секретності
  • ssl_stapling on: Вмикає OCSP stapling, зменшуючи затримку SSL handshake
  • Strict-Transport-Security: Вказує браузерам завжди використовувати HTTPS для вашого домену (HSTS)
  • http2: Вмикає HTTP/2 для покращення продуктивності на HTTPS з’єднаннях

Крок 5: Тестування конфігурації 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 вкаже файл і номер рядка, де існує проблема.

Крок 6: Перезапуск Nginx для застосування змін

Після успішного проходження тесту конфігурації перезавантажте або перезапустіть Nginx:

# Graceful reload (preferred for production — no downtime)
sudo systemctl reload nginx

# Full restart (use if reload doesn't apply all changes)
sudo systemctl restart nginx

Перевірте правильність роботи Nginx після перезапуску:

sudo systemctl status nginx

Крок 7: Налаштування автоматичного поновлення SSL сертифіката

Сертифікати Let’s Encrypt закінчуються через 90 днів. Цей короткий термін дії є навмисним — він обмежує шкоду від скомпрометованих сертифікатів та заохочує автоматизацію. Certbot автоматично встановлює таймер systemd (або завдання cron) для обробки поновлень, але вам слід перевірити та протестувати його.

Перевірка існуючого таймера поновлення

sudo systemctl status certbot.timer

Ви повинні побачити, що таймер активний і запланований для запуску двічі на день.

Тестування процесу поновлення

Симулюйте поновлення без фактичної зміни будь-яких сертифікатів:

sudo certbot renew --dry-run

Успішний вивід міститиме:

Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)

Додавання хука після поновлення для перезавантаження 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

Це гарантує, що Nginx завантажує нові файли сертифіката одразу після кожного успішного поновлення.

Крок 8: Перевірка встановлення SSL

Після завершення налаштування перевірте вашу конфігурацію SSL за допомогою цих методів:

Перевірка в браузері

Перейдіть до https://yourdomain.com у вашому браузері. Ви повинні побачити значок замка в адресному рядку, що вказує на безпечне з’єднання.

Онлайн-інструменти тестування SSL

Використовуйте ці безкоштовні інструменти для аудиту якості вашої конфігурації SSL:

  • SSL Labs (Qualys): https://www.ssllabs.com/ssltest/ — Надає літерну оцінку (прагніть до A або A+)
  • Security Headers: https://securityheaders.com/ — Перевіряє ваші HTTP заголовки безпеки
  • HSTS Preload: https://hstspreload.org/ — Перевіряє відповідність вимогам для попереднього завантаження HSTS

Перевірка через командний рядок

# Check certificate details
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

# Check certificate expiry date
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

Усунення поширених проблем SSL в Nginx

ПроблемаЙмовірна причинаРішення
ERR_SSL_PROTOCOL_ERRORNginx не прослуховує порт 443Перевірте директиву listen 443 ssl; та правила брандмауера
NET::ERR_CERT_AUTHORITY_INVALIDВикористання cert.pem замість fullchain.pemОновіть ssl_certificate для використання fullchain.pem
Сертифікат не поновлюєтьсяТаймер Certbot вимкнено або порт 80 заблокованоЗапустіть sudo certbot renew --dry-run та перевірте журнали
Попередження про змішаний вмістHTTP ресурси завантажуються на HTTPS сторінціОновіть усі внутрішні посилання та URL ресурсів на HTTPS
SSL_ERROR_RX_RECORD_TOO_LONGHTTP трафік потрапляє на HTTPS портПереконайтеся, що налаштовано перенаправлення з порту 80 на 443

Вибір правильного середовища хостингу для SSL

Продуктивність та надійність вашої реалізації SSL значною мірою залежать від вашого середовища хостингу. Ось короткий огляд:

  • VPS Хостинг: Повний root доступ дає вам повний контроль над конфігурацією Nginx, параметрами SSL та управлінням сертифікатами — ідеально для цього посібника
  • Виділені сервери: Максимальна продуктивність та ізоляція для сайтів з високим трафіком, що потребують SSL конфігурацій корпоративного рівня
  • Спільний веб-хостинг: SSL зазвичай керується через панель управління; ручна конфігурація Certbot може бути недоступна
  • VPS з cPanel: Спрощує управління SSL через графічний інтерфейс, зберігаючи при цьому контроль рівня VPS

Для розробників та системних адміністраторів, яким потрібен повний контроль над їхнім SSL стеком, VPS або виділений сервер є рекомендованим вибором.

Висновок

Налаштування SSL в Nginx — це багатоетапний процес, але кожен крок служить критичній меті — від шифрування трафіку та перевірки права власності на домен до посилення конфігурації шифрів та автоматизації поновлень. Дотримуючись цього посібника, ви реалізували:

✅ Безкоштовний, довірений SSL сертифікат через Let’s Encrypt та Certbot

✅ Захищену конфігурацію SSL Nginx з сучасними протоколами TLS

✅ Перенаправлення HTTP на HTTPS для всього трафіку

✅ OCSP stapling для покращення продуктивності handshake

✅ HSTS та заголовки безпеки для глибокого захисту

✅ Автоматичне поновлення сертифікатів з хуками перезавантаження Nginx

Правильно налаштований SSL сертифікат не лише захищає ваших користувачів — він будує довіру, покращує ваші позиції в SEO та є базовою вимогою для будь-якої професійної веб-присутності. Якщо ви шукаєте надійну інфраструктуру для розміщення вашого захищеного SSL Nginx сервера, ознайомтеся з планами VPS Хостингу AlexHost, створеними спеціально для розробників та бізнесів, які серйозно ставляться до безпеки.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати