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-задания и обновляет конфигурацию вашего сервера.

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

Что происходит в процессе?

  1. Проверка владения доменом: Certbot временно изменяет вашу конфигурацию Nginx для обслуживания файла задания, доказывая 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-рукопожатия
  • 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 для улучшения производительности рукопожатия

✅ HSTS и заголовки безопасности для многоуровневой защиты

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

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

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать