Djangoプロジェクトを分離するためにnginxの複数のインスタンスを作成する

Djangoプロジェクトを分離するためにnginxの複数のインスタンスを作成する

Debian 6 で Django + PostrgreSQL + Nginx を使用してアプリを構築しています。アプリには 2 つの別個のコンポーネントがあり、後で別のマシンに配置される予定です。

コンポーネントA REST API を使用してコンポーネント B から 1 つの関数を呼び出します。この関数には、コンポーネント A では読み取り専用であるが、コンポーネント B では書き込み可能な機密データが保存されています。

コンポーネントB コンポーネントAに機密データを書き込み、API経由でデータを受信します。

私が望んでいるのは、これらのコンポーネントを分離して、Comp B の公開によって Comp A の機密データが公開されないようにすることです。そのためには、異なる Linux ユーザーで nginx のインスタンスを 2 つ実行することを考えていました。そうすれば、コンポーネント B を実行しているユーザーはsettings.pyComp A を見ることができないため、A のデータベースへのログイン資格情報や保存されたデータの暗号化キーが公開されることはありません。

私の質問は、それぞれ独自のユーザー アカウントで 2 つのインスタンスを実行するように nginx を設定するにはどうすればよいですか?可能であれば、自動アップグレードが失われないように、標準の Debian リポジトリで利用可能なパッケージのみを使用したいと思います。

答え1

必要な分離を実現するために、実際には 2 つの nginx インスタンスは必要ないように思えます。

相互作用するエージェントは 3 つあります: nginx、app1、app2。このシナリオでは、nginx は実際にはデータを直接処理せず、着信 HTTP リクエストを app1 または app2 のいずれかにルーティングするだけなので、漏洩するデータは実際にはありません。

本当に必要なのは、2 つの 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設定にディレクティブを追加して、指定されたREST-api URLで外部/コンポーネントAの参照のみを受け入れるようにします。

答え2

私は良い方向性として、ファストcgi次のようにして Comp B を開始します。

 sudo -u youruser manage.py runfcgi

関連情報