Как защитить Nginx с помощью Let’s Encrypt SSL на Ubuntu (Полное руководство 2025)
HTTPS больше не является опциональным. В 2025 году каждому веб-сайту нужно SSL/TLS шифрование — не только для защиты данных пользователей, но и для конкурентного ранжирования в Google Search и соответствия требованиям безопасности современных браузеров. Let’s Encrypt делает это достижимым бесплатно, предлагая надежные, автоматически обновляемые SSL сертификаты, которые работают безупречно с Nginx на Ubuntu.
Это подробное руководство проведет вас через каждый шаг: установка Certbot, получение SSL сертификата Let’s Encrypt, проверка конфигурации и автоматизация обновлений — все на сервере Ubuntu 18.04, 20.04 или 22.04 с Nginx.
Независимо от того, управляете ли вы средой VPS Hosting или выделенным веб-сервером, это руководство дает вам готовую к использованию в производстве конфигурацию HTTPS менее чем за 15 минут.
Почему SSL важен для Nginx в 2025
Прежде чем переходить к командам, стоит понять, что вы получаете, защитив Nginx с помощью Let's Encrypt:
- Шифрование данных: HTTPS шифрует весь трафик между вашим сервером и посетителями, предотвращая атаки «человек посередине» и подслушивание.
- Сигналы рейтинга SEO: Google подтвердил HTTPS как фактор ранжирования. Сайты без SSL активно штрафуются в результатах поиска.
- Индикаторы доверия браузера: Chrome, Firefox и Edge отображают предупреждения "Небезопасно" для сайтов HTTP, разрушая доверие пользователей и увеличивая показатели отказов.
- Бесплатно и автоматизировано: Let's Encrypt выдает сертификаты бесплатно, а Certbot автоматически обрабатывает продления — устраняя ручные затраты на платные сертификаты.
- PCI DSS и соответствие: Любой сайт, обрабатывающий платежи или личные данные, по закону обязан использовать зашифрованные соединения.
Если ваш домен уже зарегистрирован и указывает на ваш сервер, вы готовы начать. Если вам все еще нужен домен, AlexHost предлагает доступную Регистрацию доменов с мгновенным управлением DNS.
Предварительные условия
Убедитесь, что выполнены следующие условия перед началом:
| Требование | Детали |
|---|---|
| Операционная система | Ubuntu 18.04, 20.04 или 22.04 LTS |
| Веб-сервер | Nginx установлен и активно обслуживает ваш сайт |
| Доменное имя | Зарегистрированный домен с A-записью, указывающей на публичный IP вашего сервера |
| Доступ к серверу | SSH доступ с пользователем, имеющим sudo привилегии |
| Брандмауэр | Порты 80 (HTTP) и 443 (HTTPS) открыты в UFW или iptables |
| Доступ root | Не требуется строго, но sudo доступ обязателен |
Проверьте, что Nginx запущен
Перед установкой Certbot подтвердите, что Nginx активен:
sudo systemctl status nginxВы должны увидеть active (running) в выводе. Если Nginx не установлен, выполните:
sudo apt update && sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginxОткройте необходимые порты брандмауэра
Если UFW включен, разрешите трафик HTTP и HTTPS:
sudo ufw allow 'Nginx Full'
sudo ufw reload
sudo ufw statusВывод должен показать Nginx Full как ALLOW для IPv4 и IPv6.
Шаг 1 — Установка Certbot и плагина Nginx
Certbot — это официальный клиент Let's Encrypt. Он автоматизирует весь жизненный цикл сертификата: выдачу, установку и обновление. Плагин python3-certbot-nginx позволяет Certbot читать вашу конфигурацию Nginx и изменять её автоматически.
Обновите индекс пакетов
Всегда обновляйте списки пакетов перед установкой нового программного обеспечения:
sudo apt update
sudo apt upgrade -yУстановите Certbot с плагином Nginx
sudo apt install certbot python3-certbot-nginx -yПроверьте установку
certbot --versionОжидаемый результат (версия может отличаться):
certbot 2.x.x> Примечание для пользователей Ubuntu 18.04: Если версия Certbot по умолчанию в APT устарела, установите через Snap для получения последней версии:
> “`bash
> sudo snap install –classic certbot
> sudo ln -s /snap/bin/certbot /usr/bin/certbot
> “`
Шаг 2 — Настройка блока сервера Nginx
Certbot должен обнаружить ваш домен в конфигурации Nginx, чтобы автоматически его изменить. Если вы еще не создали блок сервера для вашего домена, создайте его сейчас.
Создание блока сервера
Замените yourdomain.com на ваше фактическое имя домена во всем этом руководстве:
sudo nano /etc/nginx/sites-available/yourdomain.comДобавьте следующую базовую конфигурацию:
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/yourdomain.com/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}Включение блока сервера
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/Проверка конфигурации 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
sudo systemctl reload nginxШаг 3 — Получение SSL-сертификата Let’s Encrypt
С настроенным Nginx и установленным Certbot вы можете запросить SSL-сертификат.
Запуск Certbot с плагином Nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.comОбъяснение флагов:
--nginx — указывает Certbot использовать плагин Nginx для автоматической конфигурации
-d yourdomain.com — указывает основной домен
-d www.yourdomain.com — добавляет поддомен www в один сертификат (Subject Alternative Name)
Объяснение интерактивных подсказок
Certbot проведет вас через краткий мастер установки:
1. Адрес электронной почты
Enter email address (used for urgent renewal and security notices):
Укажите действительный адрес электронной почты. Let’s Encrypt использует его для уведомления об истечении сертификатов и проблемах безопасности.
2. Условия обслуживания
Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf
(A)gree/(C)ancel:
Введите A и нажмите Enter.
3. Рассылка EFF (опционально)
Would you be willing to share your email address with the Electronic Frontier Foundation?
(Y)es/(N)o:
Это опционально. Введите N, если вы не хотите подписываться.
4. Перенаправление HTTP на HTTPS
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
1: No redirect
2: Redirect - Make all requests redirect to secure HTTPS access
Всегда выбирайте вариант 2. Это гарантирует, что все посетители автоматически перейдут на HTTPS, устраняя проблемы со смешанным контентом и повышая безопасность.
Успешный результат
Если все настроено правильно, вы увидите:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/yourdomain.com/privkey.pem
This certificate expires on YYYY-MM-DD.
These files will be updated when the certificate renews.
Deploying certificate
Successfully deployed certificate for yourdomain.com to /etc/nginx/sites-available/yourdomain.com
Successfully deployed certificate for www.yourdomain.com to /etc/nginx/sites-available/yourdomain.com
Congratulations! You have successfully enabled HTTPS on https://yourdomain.com and https://www.yourdomain.com
Что Certbot изменил в Nginx
После запуска Certbot автоматически добавляет SSL-директивы в ваш блок сервера. Ваша конфигурация теперь будет выглядеть примерно так:
server {
server_name yourdomain.com www.yourdomain.com;
root /var/www/yourdomain.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = www.yourdomain.com) {
return 301 https://$host$request_uri;
}
if ($host = yourdomain.com) {
return 301 https://$host$request_uri;
}
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 404;
}
Шаг 4 — Проверка установки SSL
После завершения работы Certbot проверьте, что ваш SSL-сертификат правильно установлен и функционирует.
Метод 1: Проверка в браузере
Откройте веб-браузер и перейдите на https://yourdomain.com. Ищите:
Значок замка в адресной строке — подтверждает активное, доверенное SSL-соединение
Отсутствие предупреждений о безопасности — сертификат действителен и доверен вашим браузером
HTTPS в URL — HTTP-запросы должны автоматически перенаправляться на HTTPS
Нажмите на значок замка и выберите «Сертификат», чтобы просмотреть издателя (должно отображаться «Let’s Encrypt») и дату истечения.
Метод 2: Глубокий анализ SSL Labs
Для комплексного аудита безопасности используйте Qualys SSL Labs:
Перейдите на https://www.ssllabs.com/ssltest/Правильно настроенная установка Let’s Encrypt + Nginx должна получить оценку A или A+. Если вы получили более низкую оценку, SSL Labs определит конкретные слабые места для исправления.
Метод 3: Проверка из командной строки
Проверьте детали сертификата непосредственно из терминала:
sudo certbot certificatesРезультат:
Found the following certs:
Certificate Name: yourdomain.com
Serial Number: abc123...
Key Type: RSA
Domains: yourdomain.com www.yourdomain.com
Expiry Date: YYYY-MM-DD HH:MM:SS+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/yourdomain.com/privkey.pemМетод 4: Команда OpenSSL
Проверьте цепочку сертификатов и срок действия с помощью OpenSSL:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -dates -issuerОжидаемый результат:
notBefore=Mon Jan 1 00:00:00 2025 GMT
notAfter=Tue Apr 1 00:00:00 2025 GMT
issuer=C=US, O=Let's Encrypt, CN=R11Шаг 5 — Настройка автоматического обновления сертификата
Сертификаты Let's Encrypt истекают через 90 дней. Этот короткий период действия намеренный — он ограничивает риск в случае компрометации приватного ключа. Certbot обрабатывает обновления автоматически, но вы должны проверить, что автоматизация работает правильно.
Как работает обновление Certbot
При установке Certbot через APT или Snap он автоматически создает systemd timer (или cron job на старых системах), который запускается дважды в день. Он проверяет, находятся ли какие-либо сертификаты в пределах 30 дней до истечения срока, и автоматически их обновляет.
Проверка Systemd Timer
sudo systemctl status certbot.timerОжидаемый результат:
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since ...
Trigger: ...
Triggers: ● certbot.serviceЕсли таймер активен и включен, автоматическое обновление уже настроено.
Тестирование процесса обновления (пробный запуск)
Перед тем как полагаться на автоматическое обновление, смоделируйте его, чтобы убедиться, что все работает:
sudo certbot renew --dry-runУспешный результат:
Simulating renewal of an existing certificate for yourdomain.com and www.yourdomain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Если пробный запуск успешен, ваши сертификаты будут обновляться автоматически без каких-либо ручных операций.
Проверка Cron Job (старые системы)
На старых версиях Ubuntu, которые не используют systemd timers, проверьте наличие cron job Certbot:
sudo cat /etc/cron.d/certbotВы должны увидеть строку, похожую на:
0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renewЭто запускает Certbot дважды в день в случайные интервалы, чтобы избежать перегрузки серверов Let's Encrypt.
Ручное обновление (если необходимо)
Если вам когда-либо потребуется вручную принудительно обновить сертификат:
sudo certbot renew --force-renewal
sudo systemctl reload nginx> Лучшая практика: После любого обновления сертификата (ручного или автоматического) перезагрузите Nginx, чтобы убедиться, что он подхватит новые файлы сертификата:
> “`bash
> sudo systemctl reload nginx
> “`
> Хуки обновления Certbot обрабатывают это автоматически в большинстве конфигураций.
Настройка хуков обновления
Чтобы убедиться, что Nginx перезагружается автоматически после каждого обновления, добавьте deploy hook:
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Устранение распространенных проблем
Ошибка: "Could not bind to IPv4/IPv6"
Certbot использует порт 80 для проверки домена. Если другой процесс использует порт 80, проверка не пройдет.
Решение: Временно остановите Nginx, получите сертификат в автономном режиме, затем перезагрузите:
sudo systemctl stop nginx
sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
sudo systemctl start nginxОшибка: "DNS problem: NXDOMAIN looking up A for yourdomain.com"
DNS-записи вашего домена еще не распространяются на серверы проверки Let's Encrypt.
Решение: Проверьте, что ваша A-запись установлена правильно:
dig yourdomain.com A +shortРезультат должен вернуть публичный IP-адрес вашего сервера. Распространение DNS может занять до 48 часов, хотя обычно разрешается в течение 1–2 часов.
Ошибка: "Too many certificates already issued"
Let's Encrypt применяет ограничение на 5 дублирующихся сертификатов в неделю на домен.
Решение: Используйте флаг --staging для тестирования вашей конфигурации без превышения лимитов:
sudo certbot --nginx --staging -d yourdomain.com -d www.yourdomain.comПосле завершения тестирования отозвите промежуточный сертификат и выпустите производственный.
Ошибка: "Nginx configuration test failed"
Certbot изменяет вашу конфигурацию Nginx. Если полученная конфигурация содержит синтаксические ошибки, Nginx не перезагрузится.
Решение: Вручную протестируйте и исправьте конфигурацию:
sudo nginx -t
sudo nano /etc/nginx/sites-available/yourdomain.com
# Fix any syntax errors, then:
sudo systemctl reload nginxСертификат не обновляется автоматически
Если вы получаете письма об истечении срока действия несмотря на установленный Certbot, проверьте статус таймера:
sudo systemctl status certbot.timer
sudo journalctl -u certbot.service --since "7 days ago"Проверьте журналы на наличие ошибок и устраните их соответственно.
Advanced: Hardening Your Nginx SSL Configuration
The default Let's Encrypt + Certbot configuration is secure, but you can further harden it for an A+ SSL Labs score.
Enable HTTP/2
Edit your server block to enable HTTP/2 for improved performance:
listen 443 ssl http2;
listen [::]:443 ssl http2;Add HSTS (HTTP Strict Transport Security)
HSTS instructs browsers to always use HTTPS for your domain, even if a user types http://:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;Disable Weak Protocols and Ciphers
Add these directives to your nginx.conf or server block:
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;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;After making changes, always test and reload:
sudo nginx -t && sudo systemctl reload nginxВыбор правильного хостинга для вашей настройки Nginx + SSL
Производительность и надежность вашего SSL-защищенного сервера Nginx во многом зависят от базовой инфраструктуры. Вот как варианты хостинга AlexHost соответствуют различным случаям использования:
- VPS Hosting — Идеален для большинства веб-сайтов и приложений. Полный доступ root позволяет вам настроить Nginx и Certbot точно так, как описано в этом руководстве. VPS планы AlexHost работают на Ubuntu 18.04, 20.04 и 22.04 LTS.
- Dedicated Servers — Лучший выбор для высоконагруженных веб-сайтов, требующих максимальной производительности, выделенных ресурсов и полного контроля над оборудованием. Запускайте несколько виртуальных хостов Nginx, каждый с собственным сертификатом Let’s Encrypt.
- VPS с cPanel — Если вы предпочитаете графический интерфейс для управления SSL-сертификатами наряду с веб-хостингом, cPanel интегрируется с Let’s Encrypt и обрабатывает выдачу сертификатов через функцию AutoSSL.
- SSL Certificates — Для корпоративных сред, сайтов электронной коммерции или приложений, требующих сертификатов с расширенной проверкой (EV) или проверкой организации (OV), AlexHost предлагает премиум SSL-сертификаты с гарантией покрытия и поддержкой.
Заключение
Защита Nginx с помощью SSL-сертификата Let's Encrypt на Ubuntu — один из наиболее эффективных шагов, которые вы можете предпринять для защиты своих пользователей, улучшения рейтинга в поисковых системах и завоевания доверия аудитории. Весь процесс — от установки Certbot до включения автоматического обновления — занимает менее 15 минут и ничего не стоит.
Вот краткое резюме того, что вы выполнили в этом руководстве:
- ✅ Установили Certbot и плагин Nginx
- ✅ Настроили правильный блок сервера Nginx для вашего домена
- ✅ Получили доверенный SSL-сертификат Let's Encrypt
- ✅ Проверили сертификат с помощью инструментов браузера, SSL Labs и OpenSSL
- ✅ Подтвердили автоматическое обновление через systemd timer и тестирование в режиме dry-run
- ✅ Применили продвинутое усиление безопасности для рейтинга A+
Теперь, когда ваш сервер Nginx защищен, рассмотрите возможность изучения дополнительных уровней защиты: Web Application Firewall (WAF), fail2ban для защиты от перебора паролей и регулярные аудиты безопасности. Если вы управляете несколькими доменами или приложениями, VPS Control Panels AlexHost предоставляют упрощенный интерфейс для управления SSL-сертификатами, виртуальными хостами и конфигурациями сервера без ущерба для гибкости среды Linux.
Ваши пользователи заслуживают безопасное соединение. Теперь оно у них есть.
на всех хостинговых услугах