Sie möchten also nginx
eine Anfrage vom Client an den Backend-Server weiterleiten und diese Antwort dann, bevor Sie die Antwort des Backends an den Client zurücksenden, über einen anderen externen Prozessor weiterleiten?
Ich glaube nicht, dass Sie dies mit offiziellen nginx
Modulen tun können, wie sie derzeit von Igor Sysoev und Nginx, Inc bereitgestellt werden. Die nächste Sache , die zur Veränderung des Körpers der Antwort verfügbar ist , ist ein paar Filtermodule , die zusammen kommen mit nginx, ist aber standardmäßig deaktiviert gedreht, darunter die add_before_body
, add_after_body
und sub_filter
Richtlinien:
http://nginx.org/en/docs/http/ngx_http_addition_module.html
http://nginx.org/en/docs/http/ngx_http_sub_module.html
Auch vielleicht gzip on;
ist das, was Sie eigentlich wollen stattdessen?
http://nginx.org/en/docs/http/ngx_http_gzip_module.html
Oder, wenn Sie perl
ein vollständig experimentelles Modul kennen und bereit sind, es auszuführen, werfen Sie einen Blick auf die Einbettung perl
in nginx
ein offizielles Nginx-Modul, das standardmäßig deaktiviert ist und (etwas offensichtlich) vollständig experimentell ist:
http://nginx.org/en/docs/http/ngx_http_perl_module.html
Eine andere Möglichkeit besteht darin, eine Art Fast-CGI-Setup zu verwenden, zu dem Sie die Anforderungen umleiten, wobei Ihr Fast-CGI-Skript wiederum Anforderungen an das Backend und anschließend die endgültige Verarbeitung vor der Rückkehr ausführt Die Antworten werden an nginx zurückgegeben, um sie zwischenzuspeichern und an den Benutzer zurückzugeben.
Es gibt auch proxy_set_body
(aber noch keine fastcgi_set_body
) Möglichkeiten, den Hauptteil der Anfrage zu ändern (z. B. von dem, was der Client angegeben hat), aber es scheint keine äquivalente Anweisung oder Variable zu geben, um den Hauptteil der Antwort zu erhalten, um zu bestehen zu einer irgendwie nachfolgenden Anfrage an einen Postprozessor. In jedem Fall ist ein Filtermodul wahrscheinlich das, was Sie für einen Postprozessor wünschen.
(Sie wissen auch, dass ein naiver Ansatz, fork
Antworten durch eine reguläre Führungskraft zu geben und zu leiten, besonders langsam sein wird, oder?)
Zusammenfassend denke ich, dass gzip on;
es genau das ist, wonach Sie suchen. Andernfalls können Sie, sofern Sie die ursprüngliche Webanwendung ändern können, am besten eine Art Postprozessor in der Webanwendung selbst installieren, was insgesamt als die nächst einfachere Lösung erscheint. Möglicherweise können Sie untersuchen, wie die Filtermodule implementiert sind, z. B. das oben erwähnte ngx_http_addition_filter_module.c sowie einige offensichtlich relevantere Filter wie ngx_http_gzip_filter_module.c, und Ihr eigenes eingebettetes Filtermodul implementieren. Oder beauftragen Sie Nginx, Inc., dies für Sie zu schreiben! Aber im Ernst, gzip on;
funktioniert einfach und liefert wahrscheinlich viel bessere Ergebnisse ohne Probleme, Leistung oder Stabilitätsprobleme. Es ist bereits standardmäßig kompiliert. Sie müssen es nur aktivierennginx.conf
.