несколько экземпляров nginx для разделения проектов Django

несколько экземпляров nginx для разделения проектов Django

Я создаю приложение с использованием Django + PostrgreSQL + Nginx на Debian 6. Приложение состоит из двух отдельных компонентов, которые позже будут размещены на разных машинах.

Компонент А вызывает одну функцию из компонента B с помощью REST API. Он хранит конфиденциальные данные, которые должны быть доступны только для чтения компонентом A, но доступны для записи компонентом B.

Компонент Б записывает конфиденциальные данные в компонент A и получает данные через его API

Я хотел бы разделить эти компоненты, чтобы раскрытие Comp B не привело к раскрытию конфиденциальных данных в Comp A. Чтобы сделать это, я думал о том, чтобы запустить 2 экземпляра nginx под разными пользователями Linux. Тогда пользователь, под которым запущен компонент B, не сможет увидеть Comp settings.pyA, что раскрыло бы учетные данные для входа в базу данных A и ключи шифрования хранимых данных.

Мой вопрос:как настроить nginx для запуска двух экземпляров, каждый под своей учетной записью пользователя?Если возможно, я бы хотел использовать только пакеты, доступные в стандартных репозиториях Debian, чтобы не потерять возможность автоматических обновлений.

решение1

Мне кажется, что вам на самом деле не нужно 2 экземпляра nginx, чтобы получить желаемое разделение.

У вас есть 3 взаимодействующих агента: nginx, app1 и app2. В этом сценарии nginx фактически не обрабатывает данные напрямую, он просто направляет входящие http-запросы либо в app1, либо в app2, следовательно, у него фактически нет никаких данных для утечки.

Мне кажется, что на самом деле вы хотите, чтобы два приложения Django запускались от имени разных пользователей, с разрешениями, настроенными так, чтобы приложение 1 не могло получить доступ к данным приложения 2 (кроме как через rest-api).

Вы не указываете, как nginx взаимодействует с приложениями, но любой из обычных механизмов (fastcgi, обратное проксирование, scgi, ...) позволяет довольно легко создать отдельный процесс для каждого приложения.

На стороне nginx вы можете добиться чистого разделения, просто создав 2 серверных блока, каждый со своим собственным поддоменом/доменным именем.

Для большего спокойствия вы могли бы добавить немногоhttp://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referersдирективы для конфигурации компонента B nginx, чтобы убедиться, что он принимает только внешние/компонентные ссылки на указанные URL-адреса REST-API

решение2

Я обнаружил, что хорошим направлением является использованиеfastcgiи запустите Comp B следующим образом:

 sudo -u youruser manage.py runfcgi

Связанный контент