Apache-2.2

nginx proxy_cache:限制對後端的並行請求

  • May 26, 2015

我使用 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。

看看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

引用自:https://serverfault.com/questions/383156