várias instâncias do nginx para manter os projetos do Django separados

1

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

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

Componente B grava dados sensíveis a dados ao Componente A e recebe dados por meio de sua API

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

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

    
por Belda 22.08.2012 / 15:18

2 respostas

2

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

Você tem 3 agentes interagindo: nginx, app1 e app2. Neste cenário, o nginx na verdade não manipula os dados diretamente, ele simplesmente encaminha os pedidos HTTP de entrada para o app1 ou o app2, consequentemente ele não tem nenhum dado para vazar.

Parece-me que o que você realmente quer é ter os 2 aplicativos django sendo executados como usuários diferentes, com permissões configuradas para que o app1 não consiga obter os dados do aplicativo 2 (exceto através do resto-api).

Você não especifica como o nginx fala com os aplicativos, mas qualquer um dos mecanismos usuais (fastcgi, reverse proxying, scgi, ...) torna bastante fácil ter um processo separado para cada aplicativo.

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

Para mais tranquilidade, você pode adicionar algumas diretrizes link ao componente B nginx config para ter certeza de que ele aceita apenas referências externas / componentA na URL especificada da API REST

    
por 23.08.2012 / 20:52
1

Descobri que uma boa direção é usar o fastcgi e iniciar o Comp B da seguinte forma:

 sudo -u youruser manage.py runfcgi
    
por 27.08.2012 / 10:29