Entonces, ¿desea nginx
enviar una solicitud del cliente al servidor de fondo y luego, antes de devolver la respuesta del cliente al cliente, canalizar dicha respuesta a través de otro procesador externo?
No creo que pueda hacer lo anterior con ningún nginx
módulo oficial tal como lo proporcionan actualmente Igor Sysoev y Nginx, Inc. Lo más parecido que está disponible para alterar el cuerpo de la respuesta es de unos módulos de filtro que se unen con Nginx, pero están desactivados por defecto, incluyendo el add_before_body
, add_after_body
y sub_filter
directivas:
http://nginx.org/en/docs/http/ngx_http_addition_module.html
http://nginx.org/en/docs/http/ngx_http_sub_module.html
Además, ¿ quizás gzip on;
es lo que realmente quieres en su lugar?
http://nginx.org/en/docs/http/ngx_http_gzip_module.html
O, potencialmente, si sabe perl
y está dispuesto a ejecutar un módulo totalmente experimental, echar un vistazo a la incorporación perl
en nginx
, con un módulo oficial nginx que está desactivada por defecto y es (algo obvio) totalmente experimental:
http://nginx.org/en/docs/http/ngx_http_perl_module.html
Otra opción es utilizar algún tipo de configuración Fast-CGI a la que redirigirá las solicitudes, donde, a su vez, su secuencia de comandos Fast-CGI realizará solicitudes al back-end y luego al procesamiento final, antes de regresar las respuestas vuelven a nginx a la memoria caché y vuelven al usuario.
También hay proxy_set_body
(pero fastcgi_set_body
aún no ), para cambiar el cuerpo de la solicitud (por ejemplo, de lo que ha proporcionado el cliente), pero no parece haber ninguna directiva o variable equivalente para obtener el cuerpo de la respuesta, para pasar a una solicitud posterior de alguna manera a un postprocesador. En cualquier caso, un módulo de filtro es probablemente lo que desea para un postprocesador.
(Además, te das cuenta de que un enfoque ingenuo de fork
responder y canalizar las respuestas a través de un ejecutivo regular será muy lento, ¿verdad?)
Para resumir , creo que gzip on;
es exactamente lo que estás buscando; de lo contrario, siempre que pueda modificar la aplicación web original, creo que su mejor opción podría ser instalar algún tipo de postprocesador dentro de la aplicación web, que parece ser la próxima solución más fácil en general. Potencialmente, podría analizar cómo se implementan los módulos de filtro , por ejemplo, el ngx_http_addition_filter_module.c mencionado anteriormente, además de algunos filtros obviamente más relevantes como ngx_http_gzip_filter_module.c e implementar su propio módulo de filtro incorporado. ¡O contrate a Nginx, Inc. para que escriba esto para usted! Pero, en serio, gzip on;
simplemente funciona, y es probable que le brinde resultados mucho mejores sin problemas, problemas de rendimiento o estabilidad, y ya está compilado de forma predeterminada, solo tiene que habilitarlo ennginx.conf
.