Mein Setup scheint ein bisschen seltsam, aber sollte nicht zu weit geholt werden: Ich habe eine Apache2-Instanz Server-PHP-Seiten und statische Dateien. Ich habe einen Knoten js Server mit Datei-Uploads (POST
) mit node-formidable. Obendrein benutze ich nginx 1.0.14
. Um den Node-Server zum Hochladen in Formularen zu verwenden, die in PHP-Dateien geliefert werden, habe ich mich entschieden, nginx zu installieren, damit ich die gleiche Domain, Port und Protokoll behalten kann. Also im Grunde habe ich/upload was ich (direkt) an meinen Knoten js pipen möchte, möglichst außerhalb des Proxy insgesamt. Der Rest wird durch den apache2 Server handlede:Piping POST Körper mit nginx proxy_buffering und Knoten js formidable
location /upload {
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
send_timeout 600;
proxy_buffering off;
proxy_pass https://node_backend;
}
location/{
proxy_set_header Host $http_host;
proxy_pass https://apache_backend;
}
die auf https://stackoverflow.com/a/1167559
Mein Problem zugrunde liegt, ist, dass der nginx die gesamte POST-Anforderung puffert, bevor es von nginx zu Knoten js senden. Ich kann dies überprüfen, da der Fortschrittsindikator in Chrome bis zu 100% zählt, bevor mein Knoten js erreicht wird (mit einem sofortigen Upload von 0-100% (da er von localhost an localhost gesendet wird)).
Ich verstehe nicht, warum proxy_buffering off
nicht funktioniert, wie ich erwarte (dass es nicht zwischenspeichern sollte, und stattdessen die Anforderung an das Back-End übergeben, wie es empfangen wird).
Alternativ ... Ist das auf andere Weise möglich?
Jeder Tipp/Hilfe wird sehr geschätzt.
Casper
Hinweis: Ich habe versucht, die
nginx_tcp_proxy_module
verwenden, die im Gebrauch nicht so weit verbreitet ist. Ich habe in Betracht gezogen,Varnish
zu verwenden, da es in der Lage ist, zu tun, was ich will, piping directly to node-js based on url (ausgezeichneter Blogbeitrag vom Autor btw., Lohnenswert), aber ich betreibe einen https-Server (zwei tatsächlich), also bin ich nicht sicher, obVarnish
das tun kann (https
nicht unterstützt wird, so würde ich es wickeln müssen, aber mit zwei Domänen (Zert) das unmöglich sein würde)
Dank! Ihre Antwort hat mir viel Zeit gespart. Das Hinzufügen von 'proxy_request_buffering off;' in meinem Serverblock funktioniert. – codeKonami