Portanto, você deseja nginx
proxy 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 nginx
mó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_body
e 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 perl
e estiver disposto a executar um módulo totalmente experimental, observe a incorporação perl
em 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_body
ainda 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 fork
e 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
.