nginx proxy_cache:限制对后端的并行请求

Modified on: Wed, 11 Sep 2019 18:20:02 +0800

我使用nginx作为后端的反向代理。配置非常基础,例如核心只是:

upstream myservice {
    server 127.0.0.1:80;
    server 123.123.123.123:80;
}

location / {
    proxy_pass  http://myservice;
    proxy_set_header Host myservice;
}

现在我的服务计算量非常大,我希望nginx将活动并行(同时)请求的数量限制为单个上游后端,例如: 10.

我查看了limit_req模块,但是这个模块似乎只关注每分钟的传入请求。我特别想限制活动后端连接的数量;即如果请求已经退回,请考虑。这有可能吗?

在Varnish中,这可以使用例如

来完成

backend cpu1 {
  .host = "127.0.0.1";
  .port = "80";
  .max_connections = 20;
}

但是我需要使用nginx。

作者:Jeroen

最佳答案

查看limit_conn模块。虽然我发现的所有示例都是通过远程IP进行限制,但如果将常量传递给limit_conn_zone而不是远程IP,则将限制与服务器的总连接。

像这样:

upstream myservice {
    server 127.0.0.1:80;
    server 123.123.123.123:80;
}

set $const 1;
limit_conn_zone $const zone=one:1m;

location / {
    limit_conn one 10;
    proxy_pass  http://myservice;
    proxy_set_header Host myservice;
}

编辑:似乎此模块仅适用于更新版本的nginx(可能是> = v1.1.8)。如果要使用此选项并使用旧版本的nginx,则可能需要从源代码编译。

编辑2:如果您的nginx只执行代理职责,请查看worker_connections

作者:,dwurf

相关问答

添加新评论