我的設置看起來有點奇怪,但不應該太過牽強: 我有一個服務於php頁面和靜態文件的apache2實例。我有一個節點js服務器處理文件上傳(POST
)使用node-formidable。最重要的是,我使用了nginx 1.0.14
。 爲了使用節點服務器以php文件形式提供的表單上傳,我決定放置nginx,以便保持相同的域,端口和協議。 所以基本上我有/上傳,我想(直接)管到我的節點js,最好在代理之外。其餘部分由Apache2的服務器handlede:使用nginx proxy_buffering和節點js管道POST身體強大
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;
}
這是基於https://stackoverflow.com/a/1167559
我的問題是,從nginx的nginx的發送它節點JS之前緩衝整個POST請求。我可以驗證這一點,Chrome瀏覽器中的進度指示器在我的節點js命中之前一直高達100%(即時從0-100%(因爲它從本地主機發送到本地主機))。
我不明白爲什麼proxy_buffering off
不按我期望的方式工作(它不應該緩衝,而是在收到後將請求傳遞給後端)。
或者......這是否可能以其他方式?
任何提示/幫助非常感謝。
卡斯帕
注: 我使用
nginx_tcp_proxy_module
這是不是在使用如此廣泛嘗試。 我考慮過使用Varnish
,因爲它能夠做我想做的,piping directly to node-js based on url(作者btw。出色的博客文章,非常值得一讀),但是我運行的是https服務器(實際上是兩個),所以我不是如果一定Varnish
能做到這一點(不支持https
,所以我不得不把它包起來,但是有兩個域(證書),那簡直是不可能的)
謝謝!你的回答爲我節省了很多時間。添加'proxy_request_buffering關閉;'在我的服務器塊使它的工作。 – codeKonami 2017-02-28 15:13:45