Nginx• Гайды по выбору

Reverse Proxy с Nginx: SSL, балансировка и кэширование за 20 минут

Настраиваем Nginx как reverse proxy перед приложением: бесплатный SSL через Certbot, балансировка на несколько бэкендов и кэш статики.

Обновлено: 2026-11-06T06:00:05.775Z
Время чтения: ~10 мин
Автор: Артём Савельев (DevOps-инженер)
Быстрый ответ & Краткая суть

Nginx как reverse proxy: принимает HTTPS-трафик (SSL termination), проксирует в приложение по HTTP, кэширует статику и балансирует нагрузку между бэкендами. SSL через Certbot (Let's Encrypt) — бесплатно. Upstream директива — балансировка с weight и fail_timeout. Proxy cache — кэширование API на стороне Nginx.

SSLCertbot + Let's Encrypt (бесплатно)
Балансировкаupstream + weight + health check
Кэшproxy_cache + proxy_cache_valid
Установкаapt install nginx certbot
Ключевые выводы и краткая суть
  • Nginx reverse proxy — SSL termination, кэш статики и балансировка без изменения приложения.
  • Certbot + Nginx: бесплатный SSL-сертификат Let's Encrypt за 2 команды.
  • Upstream с weight и health check — балансировка на 2+ бэкенда с автоматическим исключением упавших.
  • Proxy cache: кэширование API-ответов на стороне Nginx снижает нагрузку на бэкенд в 5–10×.

Базовая настройка reverse proxy + SSL

Устанавливаем Nginx и Certbot, получаем SSL-сертификат и настраиваем проксирование:

nginx-ssl.sh
# Установка
sudo apt install -y nginx certbot python3-certbot-nginx

# Получение SSL-сертификата
sudo certbot --nginx -d example.com -d www.example.com

# Автообновление (certbot ставит cron автоматически)
sudo certbot renew --dry-run

Конфигурация с балансировкой и кэшем

Полная конфигурация Nginx с upstream-балансировкой на два бэкенда, кэшированием и оптимизацией:

nginx-reverse-proxy.conf
# /etc/nginx/sites-available/example.com
upstream backend {
    server 127.0.0.1:3000 weight=3;  # основной бэкенд
    server 127.0.0.1:3001 weight=1;  # резервный
    keepalive 32;
}

# Кэш для проксируемых ответов
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:10m
                 max_size=1g inactive=60m;

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # Статика
    location /static/ {
        root /var/www;
        expires 30d;
        add_header Cache-Control "public, immutable";
        try_files $uri =404;
    }

    # API с кэшированием
    location /api/ {
        proxy_pass http://backend;
        proxy_cache api_cache;
        proxy_cache_valid 200 5m;
        proxy_cache_bypass $http_cache_control;
        add_header X-Cache-Status $upstream_cache_status;

        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;
    }

    # Всё остальное → бэкенд
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}
Рекомендованные конфигурации по теме статьи

Проверенные серверы от надежных провайдеров

Весь каталог
Timeweb Cloud
Перейти
Хит цены
Timeweb Cloud

Timeweb Cloud

Москва★ 4.8

Cloud Start

CPU

1 ядер • 3.3 ГГц

RAM

1 ГБ

Диск

15 ГБ NVMe

Канал

200 Мбит/с

299 ₽/мес

Timeweb Cloud

Timeweb Cloud

Москва★ 4.8

Cloud Basic

CPU

2 ядер • 3.3 ГГц

RAM

2 ГБ

Диск

40 ГБ NVMe

Канал

200 Мбит/с

499 ₽/мес

152-ФЗ
Selectel

Selectel

Москва★ 4.9

Cloud Lite 1

CPU

1 ядер • 2.6 ГГц

RAM

1 ГБ

Диск

10 ГБ SSD

Канал

200 Мбит/с

550 ₽/мес

Часто задаваемые вопросы (FAQ)

Зачем Nginx если Node.js/Go сами умеют HTTPS?

Nginx обрабатывает SSL, кэширует статику, балансирует нагрузку и защищает от слоуп-HTTP атак. Всё это снимает нагрузку с вашего приложения. Плюс Nginx эффективнее Node.js в обработке тысяч одновременных соединений.

Как проверить работу кэша?

Заголовок X-Cache-Status: HIT — ответ из кэша, MISS — с бэкенда, BYPASS — кэш обойдён. Проверяйте: curl -I https://example.com/api/data | grep X-Cache.