múltiples instancias de nginx para mantener separados los proyectos de Django

múltiples instancias de nginx para mantener separados los proyectos de Django

Estoy creando una aplicación usando Django + PostrgreSQL + Nginx en Debian 6. La aplicación tiene dos componentes separados, que luego estarán en máquinas diferentes.

Componente A llama a una función del Componente B usando una API REST. Tiene datos confidenciales almacenados que el Componente A debe poder leer solo, pero el Componente B debe poder escribir.

Componente B escribe datos confidenciales en el Componente A y recibe datos a través de su API

Lo que me gustaría es separar estos componentes, de modo que la exposición de la Comp B no conduzca a la exposición de datos confidenciales en la Comp A. Para hacerlo, estaba pensando en tener 2 instancias de nginx ejecutándose en diferentes usuarios de Linux. Entonces, el usuario bajo el cual se ejecuta el Componente B no puede ver el settings.pyComp A, lo que expondría las credenciales de inicio de sesión en la base de datos de A y las claves de cifrado de los datos almacenados.

Mi pregunta es,¿Cómo puedo configurar nginx para ejecutar 2 instancias, cada una con su propia cuenta de usuario?Si es posible, me gustaría utilizar sólo paquetes disponibles en los repositorios estándar de Debian, para no perder las actualizaciones automáticas.

Respuesta1

Me parece que en realidad no necesitas 2 instancias de nginx para obtener la separación que deseas.

Tiene 3 agentes interactuando: nginx, app1 y app2. En este escenario, nginx en realidad no maneja los datos directamente, simplemente enruta las solicitudes http entrantes a app1 o app2, en consecuencia, en realidad no tiene ningún dato que filtrar.

Me parece que lo que realmente quieres es que las 2 aplicaciones de Django se ejecuten como usuarios diferentes, con permisos configurados para que la aplicación 1 no pueda acceder a los datos de la aplicación 2 (excepto a través de rest-api).

No especifica cómo nginx habla con las aplicaciones, pero todos y cada uno de los mecanismos habituales (fastcgi, proxy inverso, scgi, ...) hacen que sea bastante fácil tener un proceso separado para cada aplicación.

En el lado de nginx, puede tener una separación limpia simplemente teniendo 2 bloques de servidor, cada uno con su propio subdominio/nombre de dominio.

Para tener más tranquilidad, puedes agregar algunoshttp://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referersdirectivas para la configuración nginx del componente B para asegurarse de que solo acepte referencias externas/componenteA en las URL de REST-api especificadas

Respuesta2

He descubierto que una buena dirección es utilizarfastcgie inicie Comp B de la siguiente manera:

 sudo -u youruser manage.py runfcgi

información relacionada