1. 程式人生 > >nginx配置訪問限制

nginx配置訪問限制

ngx_http_limit_req_ ab 請求限制 nginx

nginx官方文檔:http://nginx.org/en/docs/

本次使用到的模塊是:ngx_http_limit_req_module

主要配置如下:

### http區域
limit_req_log_level info;
limit_req_status 400;
limit_req_zone $remote_addr zone=req_limit_per_ip:1m rate=1r/m;
### server或location區域(支持反代)
limit_req zone=req_limit_per_ip burst=5 nodelay;

主要參數:

$remote_addr:限制的依據,是nginx的變量(內部,自定義都可以);淘寶的tengine支持多個變量

zone:名稱及緩存大小
rate:頻率,單位:r/s,r/m
burst:訪問超過頻率後的延遲個數,客戶端一直處於等待狀態,多余的請求直接返回異常狀態碼
nodelay:延遲不等待,直接正常響應請求

漏桶算法:形似漏桶

漏口大小就是限制的頻率(rate),單位時間只處理一定的量;漏桶上部較寬的區域用於存放等待處理的延遲(burst),延遲的數量可以設定;當請求超過rate+burst就會溢出,直接返回錯誤狀態碼(默認是503)

異常:不生效配置

### 返回自定義文本
location /site-info {
    add_header Cache-Control no-store;
    add_header Content-Type "text/plain;charset=utf-8";
    return 200 "Site:$host\nYour IP:$remote_addr";
    limit_req zone=req_limit_per_ip burst=4 nodelay;
            } 
### 返回自定義json內容
location /update.json {
    default_type application/json;
    return 200 ‘{"version":"1.2.0"}‘;
    limit_req zone=req_limit_per_ip burst=5;
   }

以上兩種配置,無論怎麽調整zone,配置的限制都不生效,總是感覺量達不到,但我用ad測試的命令如下:

# ab -n 500 -c 5 -t 30  http://testd.forver.com/

理論上早達到了限制,應該直接返回異常狀態。只能有空再深究了。

nginx配置訪問限制