múltiplas instâncias do nginx para manter os projetos Django separados

múltiplas instâncias do nginx para manter os projetos Django separados

Estou construindo um aplicativo usando Django + PostrgreSQL + Nginx no Debian 6. O aplicativo possui dois componentes separados, que posteriormente estarão em máquinas diferentes.

Componente A chama uma função do Componente B usando uma API REST. Possui dados confidenciais armazenados que devem ser somente leitura pelo Componente A, mas graváveis ​​pelo Componente B.

Componente B grava dados confidenciais no Componente A e recebe dados por meio de sua API

O que eu gostaria é separar esses componentes, para que a exposição da Comp B não leve à exposição de dados confidenciais na Comp A. Para fazer isso, estava pensando em ter 2 instâncias do nginx rodando em diferentes usuários do Linux. Então, o usuário sob o qual o Componente B é executado não pode ver o settings.pyComp A, o que exporia as credenciais de login ao banco de dados de A e às chaves de criptografia dos dados armazenados.

Minha pergunta é,como posso configurar o nginx para executar 2 instâncias, cada uma com sua própria conta de usuário?Se possível, eu gostaria de usar apenas pacotes disponíveis nos repositórios padrão do Debian, para não perder atualizações automáticas.

Responder1

parece-me que você não precisa de 2 instâncias nginx para obter a separação desejada.

Você tem três agentes interagindo: nginx, app1 e app2. Nesse cenário, o nginx na verdade não manipula os dados diretamente, ele simplesmente roteia as solicitações http recebidas para app1 ou app2, conseqüentemente, na verdade, não tem nenhum dado para vazar.

Parece-me que o que você realmente deseja é que os dois aplicativos Django sejam executados como usuários diferentes, com permissões configuradas para que o aplicativo1 não possa obter os dados do aplicativo 2 (exceto através da API rest).

Você não especifica como o nginx se comunica com os aplicativos, mas todo e qualquer mecanismo usual (fastcgi, proxy reverso, scgi, ...) torna bastante fácil ter um processo separado para cada aplicativo.

No lado do nginx você pode ter uma separação limpa simplesmente tendo 2 serverblocks, cada um com seu próprio subdomínio/nome de domínio.

Para um pouco mais de tranquilidade, você pode adicionar algunshttp://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referersdiretivas para a configuração do componente B nginx para garantir que ele aceite apenas referências externas/componentA nos URLs da API REST especificados

Responder2

Descobri que uma boa orientação é usarfastcgie inicie Comp B da seguinte forma:

 sudo -u youruser manage.py runfcgi

informação relacionada