ฉันใช้เว็บแอปพลิเคชันขนาดเล็กที่เขียนด้วย Python ทำงานใน uWSGI และให้บริการผ่าน nginx มีคอมโพเนนต์ที่สร้างไฟล์ ZIP สำหรับดาวน์โหลด ซึ่งบางครั้งอาจมีขนาดค่อนข้างใหญ่ (หลาย GB) บ่อยครั้งที่การเชื่อมต่อระหว่าง nginx และ uWSGI ขาดและคำขอถูกยกเลิก nginx ละเว้นการตอบสนองที่ถูกตัดทอนในขณะที่เบราว์เซอร์เข้าสู่ระยะหมดเวลาเนื่องจากยังคงเปิดการเชื่อมต่ออยู่ โดยคาดว่าจะได้รับข้อมูลการตอบสนองมากขึ้น แอปพลิเคชันสร้างส่วนหัวของความยาวเนื้อหาที่เหมาะสม
จากบันทึก uWSGI:
uwsgi_response_write_body_do(): ท่อแตก [core/writer.c บรรทัดที่ 429] ระหว่าง GET [...]
OSError: ข้อผิดพลาดในการเขียน
SIGPIPE: เขียนไปยังท่อปิด/ซ็อกเก็ต/fd (อาจไคลเอ็นต์ตัดการเชื่อมต่อ) ตามคำขอ [...] !!!
ฉันได้กำหนดไว้แล้ว หมดเวลาซ็อกเก็ต
, ซ็อกเก็ตส่งหมดเวลา
และ socket-write-หมดเวลา
ถึง 180
ในการกำหนดค่า uWSGI ไม่มีประโยชน์ nginx conf รวมถึง uwsgi_read_timeout 180 วินาที;
และ uwsgi_buffering ปิด;
เอฟเฟ็กต์ส่วนใหญ่สามารถทำซ้ำได้ โดยเกิดขึ้นเกือบตลอดเวลา โดยเฉพาะอย่างยิ่งกับการตอบสนองจำนวนมาก แต่ไม่เคยเกิดขึ้นที่ออฟเซ็ตเดียวกัน การร้องขอซ้ำแล้วซ้ำเล่าอาจทำให้เสร็จสิ้นในที่สุด