我们的应用程序的 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 的保活时间提高到 75 秒是否有意义,或者即使我们没有在它前面使用反向代理,也有充分的理由将其保持在 5 秒以下?