NexNode
Все гайды
интерактивныйВеб-серверНовичок

Nginx и бесплатный HTTPS через Let's Encrypt

Поднимаем веб-сервер, выпускаем сертификат certbot и настраиваем автопродление — с проверкой каждого шага.

10 мин чтенияобновлено 23 июля 2026 г.

Сайт без HTTPS браузеры помечают как небезопасный, а сертификат Let's Encrypt бесплатен и выпускается за минуту. Разберём весь путь: от установки nginx до автопродления.

Предполагается, что базовая настройка сервера уже сделана — если нет, начните с первой настройки VPS.

Что нужно заранее

Домен, A-запись которого указывает на IP вашего сервера. Проверить можно командой dig +short ваш-домен.ru — она должна вернуть IP сервера. Изменения DNS иногда расходятся до нескольких часов.

Установить nginx

терминал
root@vps:~#apt update && apt install nginx -y

Проверьте, что служба запущена:

терминал
root@vps:~#systemctl status nginx --no-pager

Откройте http://ваш-IP в браузере — должна появиться страница «Welcome to nginx». Если страницы нет, почти всегда виноват файрвол: убедитесь, что открыт порт 80 (ufw allow 80/tcp).

Создать конфиг сайта

Не редактируйте default — заведите отдельный файл под каждый домен:

терминал
root@vps:~#nano /etc/nginx/sites-available/example.ru

Минимальный рабочий конфиг:

server {
    listen 80;
    listen [::]:80;
    server_name example.ru www.example.ru;

    root /var/www/example.ru;
    index index.html;

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

Создайте каталог сайта и тестовую страницу:

терминал
root@vps:~#mkdir -p /var/www/example.ruroot@vps:~#echo "<h1>Работает</h1>" > /var/www/example.ru/index.htmlroot@vps:~#chown -R www-data:www-data /var/www/example.ru

Включить сайт и проверить конфиг

Включение сайта в nginx — это симлинк из sites-available в sites-enabled:

терминал
root@vps:~#ln -s /etc/nginx/sites-available/example.ru /etc/nginx/sites-enabled/root@vps:~#nginx -t

Команда nginx -t обязательна: она проверяет синтаксис до перезагрузки. Если вывод заканчивается на syntax is ok и test is successful, применяем:

терминал
root@vps:~#systemctl reload nginx

Почему стоит использовать reload, а не restart?

Выпустить сертификат

Ставим certbot с плагином для nginx:

терминал
root@vps:~#apt install certbot python3-certbot-nginx -y

Запускаем выпуск — плагин сам найдёт server_name и допишет конфиг:

терминал
root@vps:~#certbot --nginx -d example.ru -d www.example.ru

Certbot спросит почту для уведомлений об истечении сертификата и предложит включить редирект с HTTP на HTTPS — соглашайтесь.

Ошибка проверки домена

Если certbot пишет о неудачной проверке, значит он не смог достучаться до http://example.ru/.well-known/.... Проверьте, что A-запись домена указывает на этот сервер, порт 80 открыт и nginx отвечает по доменному имени, а не только по IP.

Проверить автопродление

Сертификаты Let's Encrypt живут 90 дней. Certbot ставит systemd-таймер, который продлевает их автоматически. Убедитесь, что таймер активен:

терминал
root@vps:~#systemctl list-timers | grep certbot

И прогоните продление вхолостую:

терминал
root@vps:~#certbot renew --dry-run

Если тест прошёл без ошибок — про сертификат можно забыть.

Добавить базовую защиту заголовками

Несколько строк в блок server заметно повышают безопасность:

add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Применяем:

терминал
root@vps:~#nginx -t && systemctl reload nginx

Частые проблемы

502 Bad Gateway — nginx работает, но приложение за ним не отвечает. Проверьте, слушает ли ваш backend нужный порт: ss -tlnp.

Сертификат выпущен, но браузер ругается — вероятно, открыт не тот виртуальный хост. Посмотрите, какой блок отвечает на домен: nginx -T | grep server_name.

Слишком много запросов к Let's Encrypt — у центра сертификации есть лимит на выпуск для одного домена в неделю. Отлаживайте конфиг с флагом --dry-run.