在没有Nginx的情况下,在ELB背后的Gunicorn的Keepalive设置

Modified on: Mon, 04 Nov 2019 18:20:02 +0800

我们的应用程序的REST API由在具有典型自动扩展/负载平衡设置的AWS EC2实例上运行的Gun​​icorn(在Nginx后面)提供服务。负载均衡器的空闲超时为60秒,而Gunicorn的保持有效超时为2秒。我们一直在看到来自此配置的零星504 Gateway Timeout响应。根据亚马逊文档,这可能因为服务器的保持活动超时低于负载均衡器的空闲超时设置:

  

原因2:已注册的实例关闭与Elastic Load Balancing的连接。

  
  

解决方案2:在EC2实例上启用保持活动设置,并将保持活动超时设置为大于或等于负载均衡器的空闲超时设置。

使用Nginx,默认的keepalive_timeout是75秒,这显然适用于ELB默认设置。但是,Gunicorn docs建议使用keepalive设置在1-5秒的范围内。

将Gunicorn的keepalive撞到75秒是否有意义,或者是否有充分的理由将它保持在5秒以下,即使我们之前没有使用反向代理?

最佳答案

您几乎肯定希望根据ELB建议提高keepalive计时器,因为ELB会重用连接。它会保留它们直到超时到期,如果另一个请求到达ELB,它通常会使用已经打开的连接之一发送给你。

504 Gateway Timeout对于这种情况来说是一个奇怪的错误,但是当连接的重用与后端的过早关闭一致时,它似乎是ELB返回的。

如果浏览器直接与后端通信,5秒推荐可能有意义,但ELB不是这种情况,ELB在HTTP模式下运行时本身就是一个正确的反向代理。


相关问答

添加新评论