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

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

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

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

我想分离这些组件,以便Comp B的暴露不会导致Comp A中的敏感数据暴露。为了这样做,我正考虑在不同的linux用户下运行nginx的两个实例。 然后运行组件B的用户将无法看到Comp A的settings.py ,这会将login凭证公开给A的数据库和存储数据的encryption密钥。

我的问题是, 我怎样才能设置Nginx运行2个实例,每个都在自己的用户帐户下? 如果可能的话,我只想使用标准Debian软件库中的软件包,以免丢失自动升级。

在我看来,你并不需要2个nginx实例来获得你想要的sepperation。

你有3个代理交互:nginx,app1和app2。 在这种情况下,nginx并不直接处理数据,它只是将传入的http请求路由到app1或app2,因此实际上并没有任何数据泄漏。

在我看来,你真正想要的是有2个Django应用程序作为不同的用户运行,权限设置,以便app1不能得到应用程序2的数据(除了通过rest-api)。

您不指定nginx如何与应用程序通信,但是任何和所有通常的机制(fastcgi,reverse proxying,scgi,…)都可以很容易地为每个应用程序创build一个sepperate进程。

在nginx的一面,你可以通过简单的有两个服务器块,每个都有自己的子域名/域名来实现干净的分隔。

想了解更多,可以在组件B nginxconfiguration文件中添加一些http://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referers指令,以确保它只接受指定REST中的external / componentA引用-apiurl

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

  sudo -u youruser manage.py runfcgi