Как настроить обратный прокси Nginx на Ubuntu

Как настроить обратный прокси Nginx на Ubuntu

Введение

Обратный прокси выступает посредником между клиентом и серверами приложений, распределяя трафик, скрывая внутреннюю архитектуру и обеспечивая дополнительную защиту. Настройка 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; для этого локейшена.

Обсуждение закрыто.