我们应用程序的 REST API 由运行在 AWS EC2 实例上的 Gunicorn(不在Nginx 后面)提供服务,具有典型的自动扩展/负载平衡设置。负载均衡器的空闲超时为 60 秒,而 Gunicorn 的保活超时为 2 秒。我们一直看到504 Gateway Timeout
此配置的零星响应。根据Amazon docs,这可能是因为服务器的保持活动超时低于负载均衡器的空闲超时设置:
原因 2:已注册实例关闭与 Elastic Load Balancing 的连接。
解决方案 2:在您的 EC2 实例上启用 keep-alive 设置,并将 keep-alive 超时设置为大于或等于负载均衡器的空闲超时设置。
使用 Nginx,默认keepalive_timeout
值为 75 秒,这显然适用于 ELB 默认设置。但是,Gunicorn 文档建议keepalive
设置在 1-5 秒的范围内。
将 Gunicorn 的 keepalive 时间提高到 75 秒是否有意义,或者即使我们没有在它前面使用反向代理,是否有充分的理由将其保持在 5 秒以下?