Reverse Proxy с Nginx: SSL, балансировка и кэширование за 20 минут
Настраиваем Nginx как reverse proxy перед приложением: бесплатный SSL через Certbot, балансировка на несколько бэкендов и кэш статики.
Nginx как reverse proxy: принимает HTTPS-трафик (SSL termination), проксирует в приложение по HTTP, кэширует статику и балансирует нагрузку между бэкендами. SSL через Certbot (Let's Encrypt) — бесплатно. Upstream директива — балансировка с weight и fail_timeout. Proxy cache — кэширование API на стороне Nginx.
- 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-сертификат и настраиваем проксирование:
# Установка
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-балансировкой на два бэкенда, кэшированием и оптимизацией:
# /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
Cloud Start
CPU
1 ядер • 3.3 ГГц
RAM
1 ГБ
Диск
15 ГБ NVMe
Канал
200 Мбит/с
299 ₽/мес
Selectel
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.