REST API ของแอปของเราให้บริการโดย Gunicorn ( ไม่ใช่ Nginx) ที่ทำงานบนอินสแตนซ์ AWS EC2 ด้วยการตั้งค่าการปรับขนาดอัตโนมัติ / การโหลดบาลานซ์โดยทั่วไป การหมดเวลาว่างของตัวโหลดบาลานซ์คือ 60 วินาทีและการหมดเวลาการรักษาของ Gunicorn คือ 2 วินาที เราได้เห็น504 Gateway Timeout
การตอบสนองเป็นระยะ ๆจากการกำหนดค่านี้ ตามเอกสารของ Amazonอาจเป็นเพราะการหมดเวลาแบบเก็บสดของเซิร์ฟเวอร์ต่ำกว่าการตั้งค่าการหมดเวลาที่ไม่ได้ใช้งานของ load balancer:
สาเหตุที่ 2: อินสแตนซ์ที่ลงทะเบียนแล้วปิดการเชื่อมต่อกับ Elastic Load Balancing
โซลูชันที่ 2: เปิดใช้งานการตั้งค่าแบบ keep-alive ในอินสแตนซ์ EC2 ของคุณและตั้งค่าการหมดเวลาแบบ keep-alive ให้มากกว่าหรือเท่ากับการตั้งค่าการหมดเวลาที่ไม่ได้ใช้งานของตัวโหลดบาลานซ์ของคุณ
ด้วย Nginx ค่าเริ่มต้นkeepalive_timeout
คือ 75 วินาทีซึ่งเห็นได้ชัดว่าทำงานได้ดีกับการตั้งค่าเริ่มต้นของ ELB อย่างไรก็ตามGunicorn docsแนะนำการkeepalive
ตั้งค่าในช่วง 1-5 วินาที
มันสมเหตุสมผลหรือไม่ที่จะชนกันเป็นเวลา 75 วินาทีของ Gunicorn หรือมีเหตุผลที่ดีที่จะทำให้มันต่ำกว่า 5 วินาทีแม้ว่าเราไม่ได้ใช้ reverse proxy อยู่ข้างหน้า