Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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

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

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

 sudo -u youruser manage.py runfcgi