限制單位時間內的請求數

頁面規則的下拉選單裡面有很多動作,我們從中選擇“限制請求動作”類別中的 限制請求數, 它是用來控制指定時間段內的請求數量。

前面限制請求速率是從請求速度方面來做限制,而限制請求數是從總的請求數上做限制。 限制請求數有三個引數:

  1. 關鍵字: 預設是按照終端的 IP 地址作為 key 來計數;
  2. 拒絕於: 如果區間內的請求超過這個值,就會返回給終端 503 錯誤;
  3. 時間視窗: 計數的時間區間,單位是秒。進入下一個區間時,計數會被清零,開始新的計數。

以這個設定為例,含義是在每一個 60 秒內,如果有某個終端的請求超過 1 個,就返回 503 錯誤。

這個規則我們不開啟條件,直接點選右下方的建立按鈕。

那麼這個限制規則到底生效沒有呢?我們來驗證下。

我們首先要進入 釋出 頁面,把這個規則同步到所有閘道器的節點中去。

如果釋出可以檢視釋出,這裡不再贅述。

然後再開啟 shell 來模擬客戶端的訪問。

我們的第一次訪問不會被限制,返回了 404,因為這個頁面並不存在。

$ curl -i -H 'host: rewrite-rule-test.com' endawshk100.dev.openresty.com/404.html
HTTP/1.1 404 Not Found
Date: Fri, 04 Sep 2020 04:43:20 GMT
Content-Type: text/html
Content-Length: 150
Connection: keep-alive
Server: openresty+

<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>openresty</center>
</body>
</html>

同樣的請求,我們再次傳送一次,看看是否會如預期中的返回 503:

$ curl -i -H 'host: rewrite-rule-test.com' endawshk100.dev.openresty.com/404.html
HTTP/1.1 503 Service Temporarily Unavailable
Date: Fri, 04 Sep 2020 04:43:21 GMT
Content-Type: text/html
Content-Length: 194
Connection: keep-alive
Server: openresty+

<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body>
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>openresty</center>
</body>
</html>

不出所料,第二次請求返回了 503 錯誤,這表示我們上面的規則生效了。