Руководство по настройке Nginx и бесплатного SSL (Certbot) на VPS-сервере

Автор: Javohir Abdullayev · · Сервер и DevOps

Руководство по настройке Nginx и бесплатного SSL (Certbot) на VPS-сервере

Введение: Почему Nginx и SSL обязательны для каждого проекта?

Когда веб-проект или Telegram-бот API готов, наступает время развернуть его на сервере (VPS) для реальных пользователей. Многие начинающие разработчики запускают приложение напрямую на открытом порту (например, 8000 или 5000). Однако это небезопасная практика с точки зрения защиты данных и производительности.

Nginx — это современный, быстрый и стабильный обратный прокси-сервер (reverse proxy), который принимает входящие запросы, быстро раздает статические файлы и безопасно перенаправляет трафик на ваше приложение на Django, FastAPI или Node.js. SSL (HTTPS), в свою очередь, шифрует данные между пользователем и сервером, гарантируя безопасность и повышая рейтинг сайта в поисковых системах.

В этом практическом руководстве мы шаг за шагом рассмотрим установку Nginx на Ubuntu VPS, привязку доменного имени и настройку бесплатного SSL-сертификата с помощью Let's Encrypt.

Шаг 1: Обновление VPS-сервера и установка Nginx

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

sudo apt update && sudo apt upgrade -y
sudo apt install nginx -y

После установки Nginx вы можете проверить его статус:

sudo systemctl status nginx

Если включен межсетевой экран (UFW), разрешите открытые порты для Nginx:

sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status

Шаг 2: Направление доменного имени на VPS-сервер (DNS)

Перед получением SSL-сертификата ваше доменное имя должно быть правильно привязано к IP-адресу VPS-сервера. В панели управления доменом добавьте следующие две A-записи (DNS A record):

  • Host: @ | Значение: IP_Вашего_Сервера
  • Host: www | Значение: IP_Вашего_Сервера

Распространение DNS-записей обычно занимает от 5 минут до 24 часов. Проверить это можно с помощью команды ping yourdomain.uz.

Шаг 3: Конфигурация Nginx Server Block (Virtual Host)

Для каждого отдельного домена рекомендуется создавать отдельный серверный блок Nginx. Откроем новый конфигурационный файл:

sudo nano /etc/nginx/sites-available/sizningdomen.uz

Вставьте в этот файл следующую базовую конфигурацию (предполагается, что проект работает на порту 8000):

server {
    listen 80;
    server_name sizningdomen.uz www.sizningdomen.uz;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Сохраните файл (Ctrl+O, Enter, Ctrl+X). Теперь активируем конфигурацию и проверим на наличие синтаксических ошибок:

sudo ln -s /etc/nginx/sites-available/sizningdomen.uz /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Шаг 4: Установка Certbot и получение бесплатного SSL от Let's Encrypt

Certbot — это наиболее удобный инструмент для автоматического получения сертификатов Let's Encrypt и обновления настроек Nginx. Установим его через пакетный менеджер Snap:

sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Теперь установим SSL-сертификат одной командой с помощью плагина Nginx:

sudo certbot --nginx -d sizningdomen.uz -d www.sizningdomen.uz

В процессе Certbot попросит указать ваш адрес электронной почты и подтвердить согласие с условиями лицензии. После успешного завершения Certbot автоматически добавит настройки HTTPS в конфигурацию Nginx и настроит редирект всех HTTP-запросов на HTTPS.

Шаг 5: Проверка автоматического продления SSL (Auto-renewal)

Сертификаты Let's Encrypt действуют в течение 90 дней. Certbot настраивает в системе специальный таймер, который автоматически обновляет сертификат за 30 дней до истечения срока его действия. Чтобы убедиться, что механизм автообновления работает корректно, выполните тестовую команду:

sudo certbot renew --dry-run

Если команда завершилась без ошибок, ваши сертификаты будут регулярно обновляться в автоматическом режиме.

Заключение и дополнительные рекомендации по безопасности

Поздравляем! Вы успешно настроили обратный прокси Nginx и полностью защищенный протокол HTTPS на своем VPS-сервере. Теперь ваш проект безопасен для пользователей и полностью соответствует требованиям поисковых систем.

В качестве следующих шагов для дальнейшего усиления безопасности сервера рекомендуем сменить стандартный SSH-порт, установить Fail2ban, а также включить сжатие Gzip в Nginx.

Теги: #Nginx #SSL sertifikat #VPS #DevOps #Certbot