2012-09-05 31 views
33

Tôi đã định cấu hình nginx làm proxy ngược lại cho ứng dụng node.js của tôi để tải tệp lên bằng chỉ thị proxy_pass. Nó hoạt động, nhưng vấn đề của tôi là nginx đợi toàn bộ tập tin được tải lên trước khi chuyển nó lên thượng lưu. Điều này gây ra vấn đề cho tôi, bởi vì tôi muốn theo dõi tiến trình tải lên tại ứng dụng của tôi. Bất kỳ ý tưởng làm thế nào để cấu hình nginx để dòng cơ thể tập tin trong thời gian thực đến thượng nguồn?các tệp nginx tải lên trực tuyến bằng proxy_pass

+0

Bạn đã nhận được bất kỳ giải pháp cho việc này? – Sreeraj

Trả lời

26

Không có cách nào để (ít nhất là bây giờ). Yêu cầu đầy đủ sẽ luôn được đệm trước khi nginx bắt đầu gửi nó lên thượng nguồn. Để theo dõi các tệp đã tải lên, bạn có thể thử mô-đun upload progress.

Cập nhật: trong nginx 1.7.11 chỉ thị proxy_request_buffering có sẵn, cho phép vô hiệu hóa bộ đệm của phần thân yêu cầu. Nó nên được sử dụng cẩn thận, xem tài liệu.

+0

mô-đun tiến trình tải lên rất tuyệt, nhưng chúng tôi đang sử dụng một số máy chủ để tải lên xử lý sau khi cân bằng tải, vì vậy luôn có cơ hội yêu cầu cập nhật tiến trình sẽ được chuyển đến máy chủ khác (ngay cả với một số thủ thuật cân bằng tải). – bbbonthemoon

-3

Tôi nghi ngờ rằng:

proxy_buffering off; 

là những gì bạn cần, xem http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering

+2

Tôi đã thử điều đó. Thật không may có vẻ như chỉ thị này chỉ hoạt động cho phản hồi đệm (giống như mô tả) – bbbonthemoon

+4

Đây là một vé nginx cho proxy trực tiếp streaming của dữ liệu tải lên http://trac.nginx.org/nginx/ticket/251 hy vọng họ sẽ thực hiện nó đôi khi =/ – TekTimmy

5

Tengine (một ngã ba từ nginx) hỗ trợ tải lên không được cấp phép bằng cách đặt proxy_request_buffering thành tắt.

http://tengine.taobao.org/document/http_core.html

Cập nhật: trong nginx 1.7.11 chỉ thị proxy_request_buffering có sẵn, như đề cập ở trên @Maxim Dounin

+0

Ngay cả khi proxy_request_buffering bị tắt, yêu cầu vẫn được lưu vào bộ đệm. từ doc: "Khi bạn tắt proxy_request_buffering hoặc fastcgi_request_buffering, Tengine sẽ gửi phần thân tới backend hoặc nó nhận được nhiều hơn dữ liệu client_body_postpone_size hoặc toàn bộ phần thân yêu cầu đã được nhận." –

Các vấn đề liên quan