limit_conn模塊
生效階段:NGX_HTTP_PREACCESS_PHASE階段
生效范圍:全部worker進程(基於共享內存),進入preaccess階段前不生效,限制的有效性取決於key的設計:依賴postread階段的realip模塊取到真實ip
指令


limit_req模塊


指令


限制發生時向客戶端返回的錯誤碼
Syntax: limit_req_status code;
Default: limit_req_status 503;
Context: http, server, location
limit_req 與 limit_conn 配置同時生效時, limit_req有效
Example
http {
geo $limit {
default 1;
10.0.0.0/8 0;
192.168.0.0/64 0;
}
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=req_zone:10m rate=5r/s;
server {
location / {
limit_req zone=req_zone burst=10 nodelay;
}
}
}
這個例子同時使用了geo和map指令。geo塊將給在白名單中的IP地址對應的$limit變量分配一個值0,給其它不在白名單中的分配一個值1。然后我們使用一個映射將這些值轉為key,如下:
如果$limit變量的值是0,$limit_key變量將被賦值為空字符串
如果$limit變量的值是1,$limit_key變量將被賦值為客戶端二進制形式的IP地址
兩個指令配合使用,白名單內IP地址的$limit_key變量被賦值為空字符串,不在白名單內的被賦值為客戶端的IP地址。當limit_req_zone后的第一個參數是空字符串時,不會應用“流量限制”,所以白名單內的IP地址(10.0.0.0/8和192.168.0.0/24 網段內)不會被限制。其它所有IP地址都會被限制到每秒5個請求。
limit_req指令將限制應用到/的location塊,允許在配置的限制上最多超過10個數據包的突發,並且不會延遲轉發。
