Nginx: Làm thế nào để vô hiệu hóa hoàn toàn bộ đệm yêu cầu


17

Tôi đang cố gắng thiết lập Madsonic trên hộp Ubuntu của mình và để Nginx chạy trước nó. Vấn đề là, tôi tiếp tục nhận được cảnh báo này khi tôi cố tải lên nội dung qua giao diện web:

31115#0: *14 a client request body is buffered to a temporary file

Điều này cũng giải thích tại sao các thanh tiến trình trên cửa sổ tải lên không hoạt động. Đây là cấu hình Nginx có liên quan của tôi:

    # proxy the madsonic server here
    location / {
            proxy_pass                      https://madsonic-server/;
            proxy_redirect                  off;
            proxy_buffering                 off;
            proxy_request_buffering         off;
            allow                           all;
            proxy_http_version              1.1;

            proxy_set_header                Host $http_host;
            proxy_set_header                X-Real-IP $remote_addr;
            proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header                X-Forwarded-Host $server_name;
            proxy_set_header                X-Forwarded-Proto $scheme;

            client_body_buffer_size         0;
            client_max_body_size            0;
            proxy_max_temp_file_size        0;
            proxy_read_timeout              18000;
            proxy_send_timeout              18000;

            gzip                            off;
    }

Hiện tại tôi đang sử dụng Nginx 1.9.12.

Những gì tôi muốn đạt được là làm cho Nginx hoàn toàn không sử dụng bộ đệm cơ thể yêu cầu và chỉ chuyển trực tiếp cơ thể yêu cầu đến Madsonic, bất kể kích thước. Điều này thậm chí có thể? Nếu có, cấu hình chính xác là gì?

Các câu hỏi khác dường như được trả lời với các cách để đặt kích thước bộ đệm. Tôi không muốn bất kỳ bộ đệm. Tôi muốn trực tiếp chuyển cơ thể yêu cầu cho Madsonic.


Bạn không thể tắt nó. Bạn chỉ có thể đặt kích thước bộ đệm.
Michael Hampton

@MichaelHampton nhưng còn lời giải thích này thì sao?
rad

À, bạn nói đúng. Và bạn đã trả lời câu hỏi của riêng bạn, dường như.
Michael Hampton

@MichaelHampton tốt, vâng, ngoại trừ nó vẫn chưa tắt vì một số lý do :(
rad

Bất kỳ may mắn với điều này? Tôi đang gặp vấn đề tương tự theo các tài liệu cài đặt proxy_Vquest_buffering sẽ thực hiện thủ thuật, nhưng nó vẫn đệm tải lên.
alejandrodnm

Câu trả lời:


17

Tôi gặp vấn đề tương tự khi thiết lập proxy Nginx cho đăng ký Docker. Tôi đã kết thúc việc làm:

client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;

client_max_body_sizevẫn phải là 0 để ngăn chặn lỗi, nhưng watch -n 1 du -hs .rõ ràng cho thấy một sự khác biệt. Bộ đệm làm cho dữ liệu xuất hiện sau khi yêu cầu, không có bộ đệm làm cho nó xuất hiện trong khi yêu cầu.

proxy_http_version 1.1là cần thiết vì mã hóa chunked. Trích dẫn từ các tài liệu Nginx:

Khi mã hóa chuyển khối chunk HTTP / 1.1 được sử dụng để gửi phần thân yêu cầu ban đầu, phần thân yêu cầu sẽ được đệm bất kể giá trị chỉ thị trừ khi HTTP / 1.1 được bật để ủy quyền.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.