Nginx: Cara Menonaktifkan Penyangga Tubuh Secara Lengkap

17

Saya mencoba mengatur Madsonic pada kotak Ubuntu saya dan menjalankan Nginx di depannya. Masalahnya adalah, saya terus mendapatkan peringatan ini ketika saya mencoba mengunggah barang melalui antarmuka web:

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

Ini juga menjelaskan mengapa bilah progres di jendela unggah tidak berfungsi. Ini konfigurasi Nginx saya yang relevan:

    # 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;
    }

Saya menggunakan Nginx 1.9.12 saat ini.

Yang ingin saya capai adalah membuat Nginx tidak menggunakan buffer body permintaan sama sekali dan hanya mengirimkan body request langsung ke Madsonic, terlepas dari ukurannya. Apakah ini mungkin? Jika ya, konfigurasi apa yang benar?

Pertanyaan lain sepertinya dijawab dengan cara mengatur ukuran buffer. Saya tidak ingin buffer. Saya ingin langsung menyerahkan badan permintaan ke Madsonic.

rad
sumber
Anda tidak dapat mematikannya. Anda hanya dapat mengatur ukuran buffer.
Michael Hampton
@MichaelHampton tetapi bagaimana dengan penjelasan ini ?
rad
Ah kamu benar Dan sepertinya Anda sudah menjawab pertanyaan Anda sendiri.
Michael Hampton
@MichaelHampton baik, ya, kecuali itu masih belum dimatikan untuk beberapa alasan :(
rad
Keberuntungan dengan ini? Saya mengalami masalah yang sama menurut pengaturan docs proxy_request_buffering dari akan melakukan trik, tetapi masih buffering upload.
alejandrodnm

Jawaban:

17

Saya memiliki masalah yang sama menyiapkan proxy Nginx untuk registri Docker. Saya akhirnya melakukan:

client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;

client_max_body_sizemasih harus 0 untuk mencegah kesalahan, tetapi watch -n 1 du -hs .jelas menunjukkan perbedaan. Buffer membuat data muncul setelah permintaan, tidak ada buffering yang membuatnya muncul selama permintaan.

proxy_http_version 1.1diperlukan karena penyandian chunked. Kutipan dari dokumen Nginx:

Ketika HTTP / 1.1 chunked transfer encoding digunakan untuk mengirim badan permintaan asli, badan permintaan akan disangga terlepas dari nilai direktif kecuali HTTP / 1.1 diaktifkan untuk proxy.

Halfgaar
sumber