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

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

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

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

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

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

2 ответа

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

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

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

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

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

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

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

 sudo -u youruser manage.py runfcgi
Другие вопросы по тегам