Nginx: วิธีการปิดใช้งานการร้องขอบัฟเฟอร์ของร่างกายโดยสิ้นเชิง


17

ฉันกำลังพยายามตั้งค่าMadsonicบนกล่อง Ubuntu ของฉันและให้ Nginx ทำงานต่อหน้ามัน ปัญหาคือฉันได้รับคำเตือนนี้ตลอดเวลาเมื่อฉันพยายามอัปโหลดเนื้อหาผ่านเว็บอินเตอร์เฟส:

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

นอกจากนี้ยังอธิบายว่าเหตุใดแถบความคืบหน้าในหน้าต่างอัปโหลดจึงไม่ทำงาน นี่คือการกำหนดค่า Nginx ที่เกี่ยวข้องของฉัน:

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

ตอนนี้ฉันใช้ Nginx 1.9.12

สิ่งที่ฉันต้องการทำให้สำเร็จคือการทำให้ Nginx ไม่ใช้บัฟเฟอร์ตัวร้องขอเลยและส่งเนื้อความการร้องขอไปยัง Madsonic โดยตรงไม่ว่าจะมีขนาดเท่าใดก็ตาม เป็นไปได้ไหม หากเป็นเช่นนั้นจะมีการกำหนดค่าที่ถูกต้องอย่างไร

ดูเหมือนคำถามอื่น ๆ จะได้รับคำตอบพร้อมวิธีตั้งขนาดบัฟเฟอร์ ฉันไม่ต้องการบัฟเฟอร์ใด ๆ ฉันต้องการส่งคำขอไปยัง Madsonic โดยตรง


คุณไม่สามารถปิดได้ คุณสามารถตั้งค่าขนาดบัฟเฟอร์ได้เท่านั้น
Michael Hampton

@MichaelHampton แต่สิ่งที่เกี่ยวกับคำอธิบายนี้
rad

อ่าคุณพูดถูก และคุณได้ตอบคำถามของคุณเองดูเหมือนว่า
Michael Hampton

@MichaelHampton ดีใช่ แต่มันยังคงไม่ได้ปิดด้วยเหตุผลบางอย่าง :(
RAD

มีโชคกับเรื่องนี้ไหม? ฉันมีปัญหาเดียวกันตามการตั้งค่าเอกสาร proxy_request_buffering จะทำเคล็ดลับ แต่ก็ยังคงอัปโหลดบัฟเฟอร์
alejandrodnm

คำตอบ:


17

ฉันมีปัญหาเดียวกันในการตั้งค่าพร็อกซี Nginx สำหรับสตรีนักเทียบท่า ในที่สุดฉันก็ลงมือทำ:

client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;

client_max_body_sizeยังคงต้องเป็น 0 เพื่อป้องกันข้อผิดพลาด แต่watch -n 1 du -hs .แสดงให้เห็นถึงความแตกต่างอย่างชัดเจน การบัฟเฟอร์ทำให้ข้อมูลปรากฏขึ้นหลังจากที่ร้องขอไม่มีการบัฟเฟอร์ทำให้เกิดขึ้นในระหว่างการร้องขอ

proxy_http_version 1.1มีความจำเป็นเนื่องจากการเข้ารหัสที่แยกส่วน อ้างอิงจากเอกสาร Nginx:

เมื่อการเข้ารหัสการถ่ายโอน chunked HTTP / 1.1 ถูกใช้เพื่อส่งเนื้อความการร้องขอดั้งเดิมเนื้อความการร้องขอจะถูกบัฟเฟอร์โดยไม่คำนึงถึงค่า directive เว้นแต่ว่า HTTP / 1.1 ถูกเปิดใช้งานสำหรับการพร็อกซี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.