多个 nginx 实例,以使 Django 项目保持独立

多个 nginx 实例,以使 Django 项目保持独立

我正在 Debian 6 上使用 Django + PostrgreSQL + Nginx 构建一个应用程序。该应用程序有两个独立的组件,以后将安装在不同的机器上。

组件 A 使用 REST API 调用组件 B 中的一个函数。它存储了敏感数据,这些数据应由组件 A 只读,但由组件 B 可写。

组件 B 将数据敏感数据写入组件 A,并通过其 API 接收数据

我希望将这些组件分开,这样组件 B 的暴露不会导致组件 A 中的敏感数据暴露。为了做到这一点,我考虑在不同的 Linux 用户下运行 2 个 nginx 实例。这样,运行组件 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

我发现一个好的方向是使用快进快退并按如下方式启动 Comp B:

 sudo -u youruser manage.py runfcgi

相关内容