Nginx:限制每个IP同时连接到后端的数量

我们将nginx与应用程序服务器作为后端。

我们需要限制每个IP同时连接到后端的数量。 为此,我们使用了limit_conn nginx指令。 但是在所有情况下都不能很好地工作。 如果用户从一个IP生成很多连接并快速closures它们,那么nginx将这个请求传递给一个后端,但是因为客户端连接已经closures了,所以这个连接不在limit_conn

是否有可能限制每个IP到nginx的后端服务器同时连接的数量?

你可能想要设置

 proxy_ignore_client_abort off; 

确定如果客户端关闭连接而不等待响应,则应该关闭与代理服务器的连接。

从文档

另一个建议是使用limit_req来限制请求率。

恐怕这个设施还不能用于开箱即用的nginx。 根据Nginx FAQ

许多用户要求Nginx在负载平衡器中实现一个功能来限制每个后端的请求数(通常为1)。 尽管对此的支持是有计划的,但值得一提的是,对此功能的需求根源在于被代理的应用程序的不当行为

我已经看到一些第三方模块的nginx-limit-upstream,但我从来没有尝试过。