ฉันมีเซิร์ฟเวอร์ 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;
}