API REST của ứng dụng của chúng tôi được Gunicorn ( không đứng sau Nginx) chạy trên các phiên bản AWS EC2 với thiết lập cân bằng tải / tự động điển hình điển hình. Thời gian chờ nhàn rỗi của bộ cân bằng tải là 60 giây và thời gian chờ duy trì của Gunicorn là 2 giây. Chúng tôi đã được nhìn thấy 504 Gateway Timeout
phản ứng lẻ tẻ từ cấu hình này. Theo tài liệu của Amazon , điều này có thể là do thời gian chờ duy trì của máy chủ thấp hơn cài đặt hết thời gian chờ của bộ cân bằng tải:
Nguyên nhân 2: Các trường hợp đã đăng ký đóng kết nối với Cân bằng tải đàn hồi.
Giải pháp 2: Kích hoạt cài đặt duy trì trên các phiên bản EC2 của bạn và đặt thời gian chờ duy trì lớn hơn hoặc bằng với cài đặt hết thời gian chờ của bộ cân bằng tải của bạn.
Với Nginx, mặc định keepalive_timeout
là 75 giây, rõ ràng hoạt động tốt với cài đặt mặc định ELB. Tuy nhiên, tài liệu Gunicorn đề xuất keepalive
cài đặt trong khoảng 1-5 giây.
Liệu có ý nghĩa gì khi khiến Gunicorn giữ vững đến 75 giây, hay có lý do chính đáng để giữ nó dưới 5 giây mặc dù chúng tôi không sử dụng proxy ngược trước nó?