Então, você deseja que nginx
envie um pedido do cliente para o servidor backend e, antes de retornar a resposta do back-end ao cliente, canalize essa resposta por meio de outro processador externo?
Eu não acho que você possa fazer o que foi mencionado acima com qualquer módulo oficial nginx
fornecido por Igor Sysoev e Nginx, Inc atualmente. A coisa mais próxima disponível para alterar o corpo da resposta são alguns módulos de filtro que vêm junto com o nginx, mas estão desativados por padrão, incluindo as diretivas add_before_body
, add_after_body
e sub_filter
:
Além disso, talvez gzip on;
seja o que você realmente deseja em vez disso?
Ou, potencialmente, se você conhece perl
e deseja executar um módulo totalmente experimental, confira perl
em nginx
, com um módulo nginx oficial desativado por padrão e é ( um pouco obviamente) totalmente experimental:
Outra opção é usar algum tipo de configuração Fast-CGI para a qual você estará redirecionando as solicitações, onde, por sua vez, o script Fast-CGI fará solicitações ao backend e, em seguida, o processamento final, antes de retornar as respostas de volta ao nginx para armazenar em cache e retornar ao usuário.
Há também proxy_set_body
(mas ainda não há fastcgi_set_body
), para alterar o corpo do pedido (por exemplo, do que o cliente forneceu), mas não parece haver qualquer diretiva ou variável equivalente para obter o corpo da resposta, a fim de passar para um pedido subsequente de alguma forma a um pós-processador. Em qualquer caso, um módulo de filtro é provavelmente o que você deseja para um pós-processador.
(Além disso, você percebe que uma abordagem ingênua de fork
ing e respostas de piping através de um executivo regular vai ser extra-extra lento, certo?)
Para resumir , acho que gzip on;
é exatamente o que você está procurando; mais, desde que você possa modificar o webapp original, acho que sua melhor aposta seria instalar algum tipo de pós-processador dentro do próprio aplicativo, o que parece ser a solução mais fácil em geral. Potencialmente, você poderia investigar como os módulos de filtro são implementados, por exemplo o ngx_http_addition_filter_module.c acima mencionado, além de alguns filtros mais relevantes, como o ngx_http_gzip_filter_module.c, e implemente seu próprio módulo de filtro embutido. Ou contratar a Nginx, Inc. para escrever isso para você! Mas, sério, gzip on;
apenas funciona, e é provável que você obtenha resultados muito melhores sem problemas, desempenho ou estabilidade, e já está compilado por padrão, você só precisa ativá-lo em nginx.conf
.