mehrere Instanzen von Nginx, um Django-Projekte getrennt zu halten

mehrere Instanzen von Nginx, um Django-Projekte getrennt zu halten

Ich erstelle eine App mit Django + PostrgreSQL + Nginx auf Debian 6. Die App hat zwei separate Komponenten, die später auf unterschiedlichen Maschinen laufen werden.

Komponente A ruft eine Funktion von Komponente B mithilfe einer REST-API auf. Darin sind vertrauliche Daten gespeichert, die von Komponente A nur gelesen, von Komponente B jedoch geschrieben werden können.

Komponente B schreibt datensensible Daten in Komponente A und empfängt Daten über deren API

Ich möchte diese Komponenten trennen, damit die Offenlegung von Comp B nicht zur Offenlegung vertraulicher Daten in Comp A führt. Zu diesem Zweck habe ich überlegt, zwei Instanzen von nginx unter verschiedenen Linux-Benutzern laufen zu lassen. Dann kann der Benutzer, unter dem Komponente B ausgeführt wird, die von settings.pyComp A nicht sehen, wodurch die Anmeldeinformationen für die Datenbank von A und die Verschlüsselungsschlüssel der gespeicherten Daten offengelegt würden.

Meine Frage ist,Wie kann ich Nginx so einrichten, dass zwei Instanzen ausgeführt werden, jede unter einem eigenen Benutzerkonto?Wenn möglich, möchte ich nur Pakete verwenden, die in den Standard-Debian-Repositorys verfügbar sind, damit ich keine automatischen Upgrades verliere.

Antwort1

mir scheint, dass Sie nicht wirklich zwei Nginx-Instanzen brauchen, um die gewünschte Trennung zu erreichen.

Sie haben 3 Agenten, die interagieren: nginx, app1 und app2. In diesem Szenario verarbeitet nginx die Daten nicht direkt, sondern leitet eingehende HTTP-Anfragen einfach an app1 oder app2 weiter. Daher gibt es eigentlich keine Daten, die verloren gehen könnten.

Mir scheint, dass Sie wirklich möchten, dass die beiden Django-Apps als unterschiedliche Benutzer ausgeführt werden und die Berechtigungen so eingerichtet sind, dass App1 nicht auf die Daten von App 2 zugreifen kann (außer über die Rest-API).

Sie geben nicht an, wie Nginx mit den Apps kommuniziert, aber alle üblichen Mechanismen (FastCGI, Reverse-Proxying, SCGI usw.) machen es relativ einfach, für jede App einen separaten Prozess zu haben.

Auf der Nginx-Seite können Sie eine saubere Trennung erreichen, indem Sie einfach zwei Serverblöcke mit jeweils einer eigenen Subdomäne/einem eigenen Domänennamen haben.

Für mehr Seelenfrieden können Sie etwas hinzufügenhttp://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referersAnweisungen an die nginx-Konfiguration der Komponente B, um sicherzustellen, dass sie nur externe/Komponente A-Verweise an den angegebenen REST-API-URLs akzeptiert

Antwort2

Ich habe festgestellt, dass eine gute Richtung darin besteht,fastcgiund starten Sie Comp B wie folgt:

 sudo -u youruser manage.py runfcgi

verwandte Informationen