Encaminhando uma única solicitação por vários aplicativos de backend do nginx

2

Eu queria ter uma ideia se algo como o seguinte cenário fosse possível:

O Nginx manipula uma solicitação e a encaminha para algum tipo de aplicativo de autenticação em que os cookies e / ou outros tipos de identificadores de segurança são interpretados e verificados. O aplicativo talvez faça algumas adições à solicitação (anexando cabeçalhos autenticados). A falha na autenticação retorna um HTTP 401.

O Nginx pega a solicitação e a encaminha através de um aplicativo de autorização que determina, com base na identidade e no verbo HTTP (colocar, excluir, obter etc.) e URL em questão, se o ator / agente / usuário tem permissão para executou a ação pretendida. Talvez o aplicativo de autorização modifique o pedido de alguma forma, anexando outro cabeçalho, por exemplo. A falha na autorização retorna 403.

(lave, enxague, repita o padrão de proxy para qualquer número de serviços que queira participar da solicitação de alguma forma.)

Por fim, o Nginx encaminha a solicitação para o código real do aplicativo, onde a solicitação é inspecionada e as operações solicitadas são executadas de acordo com a URL em questão e onde a identidade do usuário pode ser capturada e compreendida pelo aplicativo, observando pedido HTTP alterado.

Idealmente, o Nginx poderia fazer isso de forma nativa ou com um plugin. Alguma idéia?

A alternativa que considero é ter o Nginx entregando a solicitação inicial para o aplicativo de autenticação e, em seguida, fazer com que esse aplicativo proxy a solicitação volte para o Nginx (seja na mesma caixa ou em outra caixa).

Eu sei que existem vários frameworks de aplicativos (Django, RoR, etc.) que podem fazer muitas dessas coisas "em processo", mas eu estava tentando tornar as coisas um pouco mais genéricas e auto-contidas onde diferentes aplicativos poderia "enganchar" o pipeline HTTP do Nginx e, em seguida, participar de um curto-circuito e até modificar a solicitação de acordo.

Se o Nginx não puder fazer isso, alguém tem conhecimento de outros servidores da Web que funcionarão da maneira descrita acima?

    
por Jonathan Oliver 08.07.2012 / 04:18

1 resposta

0

Depois de fazer mais pesquisas, o Nginx definitivamente suporta a capacidade de ser estendido para ativar o cenário acima, mas não há nada explicitamente "fora da caixa" que possa ser utilizado.

Um dos plugins mais promissores que podem habilitar esse cenário com pouco ou nenhum código seria o módulo Lua para habilitar uma subrequista HTTP no pipeline de processamento de solicitações: link

Outra no módulo personalizado escrito pelos caras do Russian OpenStats.com. Este módulo pode precisar ser personalizado um pouco com um pouco de código C: link

Por último, existe a possibilidade de escrever um módulo personalizado que não seja baseado nos acima mencionados, mas que ainda se ligue diretamente a sub-requisições: link

    
por 09.07.2012 / 20:58