Введение
Обратный прокси выступает посредником между клиентом и серверами приложений, распределяя трафик, скрывая внутреннюю архитектуру и обеспечивая дополнительную защиту. Настройка nginx обратный прокси на Ubuntu позволяет централизовать управление HTTPS, кэширование и балансировку нагрузки. В отличие от прямого прокси, клиент не знает о конечных узлах, что критично для микросервисных архитектур и контейнеризации. Правильная конфигурация снижает задержки, защищает бэкенды от прямых атак и упрощает масштабирование.
Установка и подготовка
Для стабильной работы используйте актуальную LTS-версию. Обновите индекс пакетов и установите репозиторий:
sudo apt update && sudo apt upgrade -y
sudo apt install nginx certbot python3-certbot-nginx -y
sudo systemctl enable nginx && sudo systemctl start nginx
Проверьте статус службы: sudo systemctl status nginx. Убедитесь, что фаервол пропускает порты 80 и 443: sudo ufw allow 'Nginx Full'. Готовность системы к развертыванию подтверждается успешным запуском демонов и отсутствием ошибок в логах.
Конфигурация nginx proxy_pass
Создайте файл виртуального хоста в директории /etc/nginx/sites-available/. Основной блок использует директиву nginx proxy_pass для перенаправления запросов на бэкенд. Ниже приведен минимально рабочий пример для приложения на localhost:3000:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Активируйте конфигурацию через симлинк, проверьте синтаксис и перезапустите сервис:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Ключевые параметры конфигурации
Правильная настройка обратного прокси требует понимания заголовков и таймаутов. Используйте таблицу для быстрого справочника:
| Директива | Назначение | Рекомендуемое значение |
|---|---|---|
| proxy_set_header Host | Передача оригинального имени хоста | $host |
| proxy_connect_timeout | Лимит времени установки соединения | 60s |
| proxy_read_timeout | Время ожидания ответа от бэкенда | 90s |
| proxy_buffering | Включение или отключение буферизации | on |
Безопасность и TLS
Для production-окружения обязательно включите шифрование. Сертификат Let’s Encrypt выдается автоматически: sudo certbot --nginx -d example.com. Nginx автоматически перенастроит конфигурацию, добавив listen 443 ssl. Для защиты от DDoS и перебора добавьте ограничение скорости: limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; и limit_req zone=one; внутри location. Интеграция с CDN требует передачи реального IP через proxy_set_header X-Real-IP $remote_addr;.
Вопрос-ответ (FAQ)
Как исправить ошибку 502 Bad Gateway?
Проверьте, запущен ли бэкенд-сервис на указанном порту. Убедитесь, что firewall не блокирует локальные соединения, а права доступа к сокетам или портам корректны. В логах nginx обычно указана точная причина отказа.
Нужно ли использовать SSL-терминацию на самом прокси?
Да, это стандартная практика. Разгрузка TLS на edge-сервере снижает нагрузку на приложения, упрощает управление сертификатами и позволяет централизовать политику шифрования.
Как отключить кэширование для WebSocket?
Добавьте заголовки proxy_set_header Upgrade $http_upgrade; и proxy_set_header Connection "upgrade"; в блок location. Также установите proxy_cache off; для этого локейшена.
Обсуждение закрыто.