nginx 的多個實例以保持 Django 專案獨立

nginx 的多個實例以保持 Django 專案獨立

我正在 Debian 6 上使用 Django + PostrgreSQL + Nginx 建立一個應用程式。

A組份 使用 REST API 從元件 B 呼叫一個函數。它儲存了敏感數據,組件 A 只能讀取這些數據,但元件 B 可以寫入這些數據。

組分B 將資料敏感資料寫入元件 A 並透過其 API 接收數據

我想要的是分離這些元件,這樣 Comp B 的暴露不會導致 Comp A 中敏感資料的暴露。那麼執行元件 B 的使用者就看不到settings.py元件 A 的訊息,這將暴露 A 資料庫的登入憑證和儲存資料的加密金鑰。

我的問題是,如何設定 nginx 來運行 2 個實例,每個實例都有自己的使用者帳戶?如果可能的話,我想只使用標準 Debian 儲存庫中提供的軟體包,以免失去自動升級功能。

答案1

在我看來,你其實並不需要 2 個 nginx 實例來獲得你想要的分離。

您有 3 個交互代理:nginx、app1 和 app2。在這種情況下,nginx 實際上不會直接處理數據,它只是將傳入的 http 請求路由到 app1 或 app2,因此它實際上沒有任何資料可以洩漏。

在我看來,你真正想要的是讓 2 個 django 應用程式以不同的用戶身份運行,並設定權限,以便 app1 無法獲取應用程式 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

相關內容