Portanto, você deseja nginxproxy de uma solicitação do cliente para o servidor de back-end e, antes de retornar a resposta do back-end ao cliente, canalize essa resposta por outro processador externo?
Eu não acho que você possa fazer o acima com qualquer nginxmódulo oficial, conforme fornecido por Igor Sysoev e Nginx, Inc atualmente. A coisa mais próxima disponível para alterar o corpo da resposta é alguns módulos de filtro que se juntam ao nginx, mas são desativados por padrão, incluindo as diretivas add_before_body, add_after_bodye sub_filter:
http://nginx.org/en/docs/http/ngx_http_addition_module.html
http://nginx.org/en/docs/http/ngx_http_sub_module.html
Além disso, talvez gzip on;seja o que você realmente deseja?
http://nginx.org/en/docs/http/ngx_http_gzip_module.html
Ou, potencialmente, se você souber perle estiver disposto a executar um módulo totalmente experimental, observe a incorporação perlem nginx, com um módulo nginx oficial que é desativado por padrão e é (um tanto obviamente) totalmente experimental:
http://nginx.org/en/docs/http/ngx_http_perl_module.html
Outra opção é usar algum tipo de configuração Fast-CGI para a qual você redirecionará as solicitações, onde, por sua vez, seu script Fast-CGI fará solicitações ao back-end e depois o processamento final antes de retornar as respostas retornam ao nginx para armazenar em cache e retornar ao usuário.
Também há proxy_set_body(mas fastcgi_set_bodyainda não ) para alterar o corpo da solicitação (por exemplo, do que o cliente forneceu), mas não parece haver nenhuma diretiva ou variável equivalente para obter o corpo da resposta, a fim de passar a uma solicitação de alguma forma subsequente para um pós-processador. De qualquer forma, 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 obter forke enviar respostas por meio de um executivo regular será extremamente extra lenta, certo?)
Para resumir , acho que gzip on;é exatamente o que você está procurando; caso contrário, desde que você possa modificar o webapp original, acho que sua melhor aposta pode ser instalar algum tipo de pós-processador dentro do próprio webapp, o que pareceria a próxima solução mais fácil em geral. Potencialmente, você pode examinar como os módulos de filtro são implementados, por exemplo, o mencionado ngx_http_addition_filter_module.c, além de alguns filtros mais obviamente relevantes, como ngx_http_gzip_filter_module.c, e implementar seu próprio módulo de filtro incorporado. Ou contrate a Nginx, Inc. para escrever isso para você! Mas, sério, gzip on;simplesmente funciona e provavelmente fornecerá resultados muito melhores sem problemas, problemas de desempenho ou estabilidade, e já está compilado por padrão, você só precisa habilitá-lo nonginx.conf.