Как настроить 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Что происходит в процессе?
- Проверка владения доменом: Certbot временно изменяет вашу конфигурацию Nginx для обслуживания файла задания, доказывая Let’s Encrypt, что вы контролируете домен
- Выдача сертификата: Let’s Encrypt выдаёт подписанный сертификат, действительный в течение 90 дней
- Автоматическая настройка 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_ERROR | Nginx не прослушивает порт 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_LONG | HTTP-трафик попадает на 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, созданные специально для разработчиков и компаний, серьёзно относящихся к безопасности.
