首先給出配置段:
http { limit_conn_zone $binary_remote_addr zone=one:10m; limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ... server { ... location /download/ { limit_rate 500k; limit_rate_after 50m; limit_conn one 1; limit_req zone=one burst=5;
}
... }
1、 limit_rate指令
limit_rate開啟nginx限速功能,可配置在http、server、location和if in location配置段。 limit_rate 500k表示限速500kB每秒,限速對象是單個連接,因此如果一個IP有多個連接的話,每個連接都是限速500k。limit_rate還有在特定情況下開啟限速的功能。
limit_rate_after和 limit_rate配合使用表示在下載的文件大小達到設定數后開啟限速效果(逐漸降速)。同樣針對於單個連接。設定大小設置太小的話可能效果不准確。
2、Module ngx_http_limit_conn_module 模塊
limit_conn_zone $binary_remote_addr zone=one:10m模塊開啟對單個ip、單個會話同時存在的連接數的限制。這里定義一個記錄區one,one的總容量是10m,該記錄區針對於變量 $binary_remote_add生效,這里是針對單個IP生效。該模塊只是一個定義,配置在http配置段,需要配合limit_conn指令使用才生效, limit_conn one 1表示該location段使用one定義的 limit_conn_zone ,對單個IP限制同時存在一個連接。
PS:limit_conn_zone0.8版本之前叫
與現在有一定的差別。
3、ngx_http_limit_req_module 模塊
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s模塊開啟對單個ip、單個會話在單位時間內請求的限制。這里zone和limit_conn_zone模塊一樣,rate表示限制的速率,1r/s表示一秒之內最多1次請求,也可以用5r/m,表示一分鍾之內最多5次請求。limit_req_zone同樣配置在http配置段。與limit_req指令配合使用才生效。limit_req zone=one burst=5表示該location段使用one定義的limit_req_zone,如果請求數超過 rate=1r/s,剩下的請求將被延遲處理,如果請求數超過burst定義的數量,多余的請求則直接返回503錯誤。
如果開啟nodelay,則超過rate=1r/s的請求直接返回503,不再延遲處理。