Как настроить SSL-сертификат Let's Encrypt на Nginx: пошаговое руководство
Настройка HTTPS на Nginx с помощью Certbot и Let's Encrypt за 15 минут
Введение
Безопасность веб-сайта сегодня — не роскошь, а необходимость. Поисковые системы ранжируют HTTPS-ресурсы выше, а браузеры всё чаще помечают сайты без шифрования как «небезопасные». Бесплатные сертификаты от Let's Encrypt позволяют защитить соединение без финансовых затрат. В этом руководстве мы разберём, как настроить SSL-сертификат Let's Encrypt на веб-сервере Nginx с помощью утилиты Certbot.
Мы рассмотрим процесс на примере Ubuntu/Debian, но инструкция подойдёт и для других популярных дистрибутивов Linux. Вы научитесь получать сертификат, настраивать HTTPS, перенаправлять HTTP-трафик и автоматизировать продление.
Требования
Прежде чем начать, убедитесь, что у вас есть:
Сервер под управлением Linux (Ubuntu 20.04/22.04, Debian 10/11 или аналогичный) с правами root или sudo.
Установленный и работающий веб-сервер Nginx.
Зарегистрированное доменное имя, указывающее A-записью на IP-адрес вашего сервера.
Открытые порты 80 (HTTP) и 443 (HTTPS) в файрволе.
Доступ к терминалу сервера (SSH).
Если Nginx ещё не установлен, выполните:
sudo apt update
sudo apt install nginxУбедитесь, что сервер доступен по домену: откройте http://ваш-домен в браузере — должна отобразиться стандартная страница Nginx.
Шаг 1: Установка Certbot
Certbot — официальный клиент Let's Encrypt, который автоматизирует получение и установку сертификатов. Для Nginx существует специальный плагин, упрощающий настройку.
В Ubuntu/Debian установите Certbot и плагин для Nginx:
sudo apt update
sudo apt install certbot python3-certbot-nginxДля других дистрибутивов используйте соответствующий пакетный менеджер (например, dnf install certbot python3-certbot-nginx в Fedora).
Проверьте установку:
certbot --versionШаг 2: Проверка конфигурации Nginx
Перед получением сертификата убедитесь, что Nginx корректно обрабатывает запросы к вашему домену. Откройте конфигурационный файл виртуального хоста. Обычно он находится в /etc/nginx/sites-available/ваш-домен или /etc/nginx/conf.d/ваш-домен.conf.
Пример минимальной конфигурации:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}Важно, чтобы в директиве server_name были указаны все домены и поддомены, для которых вы планируете получить сертификат. Сохраните файл и проверьте синтаксис:
sudo nginx -tЕсли ошибок нет, перезагрузите Nginx:
sudo systemctl reload nginxШаг 3: Настройка файрвола
Let's Encrypt использует HTTP-01 challenge для проверки владения доменом. Сервер должен быть доступен извне по порту 80. Если вы используете UFW, разрешите трафик:
sudo ufw allow 'Nginx Full'Или отдельно порты 80 и 443:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpУбедитесь, что порты открыты и в облачном файрволе, если сервер размещён у провайдера.
Шаг 4: Получение SSL-сертификата
Запустите Certbot с плагином Nginx. Утилита автоматически найдёт конфигурацию вашего домена и предложит внести изменения:
sudo certbot --nginx -d example.com -d www.example.comЕсли у вас несколько доменов, перечислите их через -d. Certbot запросит email для уведомлений об истечении сертификата и попросит согласиться с условиями. После успешной проверки домена сертификат будет получен, а Nginx автоматически настроен на использование HTTPS.
Certbot предложит выбрать, перенаправлять ли HTTP-трафик на HTTPS. Рекомендуется выбрать опцию перенаправления (redirect), чтобы весь трафик шёл по защищённому каналу.
Шаг 5: Проверка установки сертификата
После завершения работы Certbot откройте сайт по адресу https://example.com. В адресной строке браузера должен появиться значок замка. Также можно проверить сертификат командой:
sudo certbot certificatesВы увидите список сертификатов, их срок действия и пути к файлам. Обычно сертификаты хранятся в /etc/letsencrypt/live/example.com/.
Шаг 6: Ручная настройка Nginx (если нужно)
Если вы предпочитаете ручную настройку или используете нестандартную конфигурацию, Certbot может не внести изменения автоматически. Тогда настройте Nginx вручную. Пример конфигурации с HTTPS:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Улучшенные настройки SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}После правок проверьте конфигурацию и перезагрузите Nginx:
sudo nginx -t
sudo systemctl reload nginxШаг 7: Автоматическое обновление сертификата
Сертификаты Let's Encrypt действительны 90 дней. Certbot автоматически создаёт таймер systemd или задание cron для продления. Проверьте статус таймера:
sudo systemctl status certbot.timerЕсли таймер активен, обновление будет происходить автоматически. Для тестирования процесса продления выполните:
sudo certbot renew --dry-runЭта команда имитирует обновление без реальных изменений. Если ошибок нет, можно быть уверенным в автоматическом продлении.
Шаг 8: Настройка HSTS (опционально)
HTTP Strict Transport Security (HSTS) заставляет браузеры всегда использовать HTTPS для вашего домена. Добавьте в блок server с listen 443:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;Будьте осторожны: после включения HSTS откат к HTTP будет сложным. Убедитесь, что все поддомены поддерживают HTTPS.
Типичные ошибки
1. Домен не указывает на сервер. Проверьте A-запись: dig +short example.com. IP должен совпадать с адресом сервера. 2. Порт 80 закрыт. Let's Encrypt не сможет пройти проверку. Откройте порт в файрволе и облачных настройках. 3. Неверный синтаксис Nginx. Всегда выполняйте nginx -t перед перезагрузкой. 4. Конфликт с другими сервисами. Если порт 80 занят другим приложением (например, Apache), остановите его или настройте проксирование. 5. Ошибка «Too many requests». Let's Encrypt имеет лимиты на выдачу сертификатов. Используйте тестовый сервер для отладки: --staging. 6. Забыли про www. Если сертификат выдан только на example.com, при заходе на www.example.com будет ошибка. Указывайте оба домена при получении.
FAQ
Вопрос: Можно ли получить сертификат для нескольких доменов одним запросом? Да, перечислите их через -d: certbot --nginx -d site1.com -d site2.com.
Вопрос: Что делать, если сертификат не обновляется автоматически? Проверьте логи Certbot: /var/log/letsencrypt/letsencrypt.log. Убедитесь, что таймер systemd активен.
Вопрос: Как отозвать сертификат? Выполните certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem.
Вопрос: Нужно ли покупать сертификат, если есть Let's Encrypt? Для большинства сайтов бесплатного сертификата достаточно. Платные могут предлагать расширенную поддержку и гарантии.
Вопрос: Как проверить срок действия сертификата? Используйте certbot certificates или онлайн-сервисы вроде SSL Labs.
Итог
Настройка SSL-сертификата Let's Encrypt на Nginx — процесс, доступный даже новичкам. С помощью Certbot вы за несколько минут получите бесплатный сертификат, настроите перенаправление и автоматическое продление. Это повысит безопасность сайта, улучшит доверие пользователей и положительно скажется на SEO. Регулярно проверяйте статус сертификатов и следите за обновлениями Certbot, чтобы ваш сайт всегда оставался защищённым.
Читайте также
Комментарии
Комментарии доступны только зарегистрированным пользователям. Войти
- Пока нет комментариев. Будьте первым.



