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.py
Comp 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