Как настроить Nginx в качестве обратного прокси для веб-приложения

Ответ

Nginx часто используется как обратный прокси (reverse proxy). Он принимает клиентские запросы и перенаправляет их на один или несколько бэкенд-серверов (например, на Python-приложение, работающее через Gunicorn или uWSGI). Это позволяет скрыть внутреннюю архитектуру, распределять нагрузку и обрабатывать SSL.

Пример базовой конфигурации для проксирования запросов на приложение, работающее на localhost:8000:

server {
    # Nginx будет слушать 80 порт
    listen 80;
    # Доменное имя, на которое будет отзываться сервер
    server_name example.com;

    location / {
        # Перенаправляем все запросы на внутренний сервер
        proxy_pass http://127.0.0.1:8000;

        # Передаем важные заголовки, чтобы приложение знало
        # реальный хост и IP-адрес клиента
        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;
    }
}

Ключевые задачи обратного прокси:

  • Балансировка нагрузки: Распределение запросов между несколькими экземплярами приложения.
  • SSL/TLS Termination: Обработка HTTPS-запросов, снимая эту нагрузку с бэкенд-серверов.
  • Кэширование: Сохранение статических ответов для ускорения отдачи контента.
  • Безопасность: Фильтрация вредоносных запросов и сокрытие IP-адресов внутренних серверов.