Score:0

NGINX ล่าช้ามากเมื่ออัปโหลด WebDAV พร็อกซีเสร็จสิ้น

ธง nl

ฉันมีเซิร์ฟเวอร์ IIS ภายในที่ใช้งาน WebDAV ซึ่งใช้โดยตรงสำหรับการอัปโหลดและดาวน์โหลดไฟล์จากแอปพลิเคชัน Android

DNS ภายในของฉันแก้ไขไฟล์ https://webdav.mydomain.com โดยตรงไปยัง IIS (ข้าม NGINX) และการสื่อสารภายในนี้ดูเหมือนจะใช้งานได้โดยไม่มีปัญหา ความเร็วในการอัพโหลดและดาวน์โหลดนั้นไม่ได้ยอดเยี่ยมสำหรับความเร็วไร้สายที่มีอยู่ แต่เป็นสิ่งที่ฉันคุ้นเคยในการกำหนดค่า IIS ของฉัน (ไม่ว่าจะเพราะขีดจำกัดของฮาร์ดแวร์ของฉันหรือเพียงแค่ข้อจำกัดของ IIS WebDAV)

ภายนอกเครือข่าย URL แก้ไขเป็น IP สาธารณะของเซิร์ฟเวอร์ NGINX ของฉัน เมื่อใช้แอปพลิเคชันจากระยะไกล ความเร็วในการดาวน์โหลดก็ดูพอใช้ได้ (ประมาณ 25 MB/วินาที)

ความเร็วในการอัพโหลดนั้นช้า มีความเร็วประมาณครึ่งหนึ่งของการดาวน์โหลด อย่างไรก็ตาม สิ่งที่สำคัญกว่าความช้าคือมีความล่าช้าที่ยาวนานมากเมื่อสิ้นสุดการอัปโหลดก่อนที่จะเสร็จสิ้น

ลูกค้าของฉันแสดงสถานะการอัปโหลดซึ่งรายงานจำนวนไบต์ที่กำลังอัปโหลดและขนาดการอัปโหลดทั้งหมด เมื่อการอัปโหลดมีขนาดถึงประมาณ 99% ของขนาดการอัปโหลดทั้งหมด การอัปโหลดจะรออยู่ครู่หนึ่งก่อนที่จะเสร็จสิ้นในที่สุด

ในไฟล์ขนาด 50MB มันจะหยุดประมาณ 49MB และรอประมาณ 30 วินาทีก่อนที่จะเสร็จสิ้น การอัปโหลดขนาด 3GB รออย่างน้อย 5 นาทีก่อนจะเสร็จสิ้นในที่สุด

ปัญหานี้ไม่ได้เกิดขึ้นภายในเมื่อเซิร์ฟเวอร์ NGINX ไม่ได้อยู่ในการผสม ฉันยอมรับว่าฉันจะมีทรูพุตช้าลงจากภายนอก และแม้ว่าฮาร์ดแวร์ NGINX ที่จำกัดก็อาจมีการควบคุมปริมาณเพิ่มเติม แต่ฉันไม่แน่ใจว่าเหตุใด NGINX จึงสามารถอัปโหลดไปยังเซิร์ฟเวอร์ IIS ได้ล่าช้าเป็นเวลานาน

ด้านล่างนี้คือการกำหนดค่า NGINX ที่เกี่ยวข้อง:

ต้นน้ำ webdav_backend {
        เซิร์ฟเวอร์ 10.10.10.102:443;
        Keepalive 100;
}

เซิร์ฟเวอร์ {
        ฟัง 443 ssl http2;

        server_name webdav.mydomain.com;

        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;

        ปิด proxy_redirect;
        ปิด proxy_buffering;

        proxy_connect_timeout 180 วินาที;
        proxy_send_timeout 180 วินาที;
        proxy_read_timeout 180 วินาที;
        fastcgi_send_timeout 180 วินาที;
        fastcgi_read_timeout 180 วินาที;

        proxy_http_version 1.1;
        การเชื่อมต่อ proxy_set_header "";

        ตำแหน่ง @proxy {
                proxy_pass https://webdav_backend;
        }

        ที่ตั้ง / {
                try_files $uri @proxy;
                client_max_body_size 4G;
        }

        access_log /opt/var/log/nginx/webdav.mydomain.com.remote.log remote_hosts if=$remote_hosts;
        access_log /opt/var/log/nginx/webdav.mydomain.com.access.log;
        error_log /opt/var/log/nginx/webdav.mydomain.com.error.log;
}

Score:1
ธง nl

หลังจากโพสต์ฉันกลับไปลองจับข้อมูลเพิ่มเติม

ฉันสังเกตเห็นว่าระหว่างการอัปโหลด เซิร์ฟเวอร์ IIS ของฉันไม่ได้รับข้อมูลทันทีที่เริ่มการอัปโหลด สำหรับไฟล์ขนาดเล็ก เช่น ไฟล์ขนาด 50MB ของฉัน ดูเหมือนว่าเซิร์ฟเวอร์แบ็กเอนด์จะไม่เริ่มรับข้อมูลจนกว่าจะเกือบเสร็จสมบูรณ์ และสำหรับไฟล์ขนาดใหญ่ ฉันสังเกตเห็นการบัฟเฟอร์มากขึ้นในไคลเอ็นต์ ตลอดจนช่วงที่ไม่มีการใช้งานของเซิร์ฟเวอร์แบ็กเอนด์ที่รับสัญญาณของ ข้อมูล.

ฉันยังสังเกตเห็นว่าหน่วยความจำบนเซิร์ฟเวอร์ NGINX ของฉัน (ฮาร์ดแวร์แบบฝังที่มีสเปกต่ำ) กำลังลดลงประมาณ 70MB (เหลือ 75% ของหน่วยความจำที่มีอยู่) ในขณะที่มีการถ่ายโอน

ทั้งหมดนี้เสริมให้ฉันเห็นว่าเซิร์ฟเวอร์ NGINX ยังคงแคช / บัฟเฟอร์ข้อมูลแม้ว่าจะมีการระบุ "proxy_buffering off" ในการกำหนดค่าก็ตาม ฉันตรวจสอบเอกสารและพบว่า:

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_request_buffering

การปิดใช้งานคุณสมบัตินี้ไม่เพียงส่งผลให้ความล่าช้าหายไปทั้งหมด แต่ดูเหมือนว่าโดยทั่วไปแล้วความเร็วการอัปโหลดของฉันจะดีขึ้นประมาณ 50%

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา