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

Ответ

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

Ключевые директивы в конфигурации:

  1. listen: Указывает порт, который Nginx будет слушать (обычно 80 для HTTP и 443 для HTTPS).
  2. server_name: Определяет доменное имя, на которое будет отвечать этот блок server.
  3. location: Задает правила обработки запросов в зависимости от URI.
  4. proxy_pass: Перенаправляет запрос на указанный адрес внутреннего сервера.
  5. proxy_set_header: Позволяет изменять или добавлять заголовки, передаваемые проксируемому серверу.

Пример конфигурации для FastAPI-приложения, работающего на 127.0.0.1:8000:

server {
    # Слушаем стандартный HTTP порт
    listen 80;
    server_name api.example.com;

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

        # Передаем важные заголовки, чтобы приложение знало
        # о реальном клиенте и хосте
        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 /static/ {
        # Путь к файлам на сервере
        alias /var/www/app/static/;
        # Устанавливаем длительное кеширование в браузере
        expires 30d;
    }
}

Перед применением конфигурации всегда рекомендуется проверять её на синтаксические ошибки командой sudo nginx -t.