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

Jer*_*oen 7 nginx varnish reverse-proxy load-balancing apache-2.2

我使用 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

在清漆中,这可以使用例如

backend cpu1 {
  .host = "127.0.0.1";
  .port = "80";
  .max_connections = 20;
}
Run Code Online (Sandbox Code Playgroud)

但是我需要为此使用nginx。

dwu*_*urf 10

看看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;
}
Run Code Online (Sandbox Code Playgroud)

编辑:这个模块似乎只在更新版本的 nginx 中可用(可能 >=v1.1.8)。如果要使用此选项并拥有旧版本的 nginx,则可能需要从源代码编译。

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