nginx配置訪問限制
阿新 • • 發佈:2018-03-21
ngx_http_limit_req_ ab 請求限制 nginx nginx官方文檔:http://nginx.org/en/docs/
本次使用到的模塊是:ngx_http_limit_req_module
zone:名稱及緩存大小
rate:頻率,單位:r/s,r/m
burst:訪問超過頻率後的延遲個數,客戶端一直處於等待狀態,多余的請求直接返回異常狀態碼
nodelay:延遲不等待,直接正常響應請求
本次使用到的模塊是: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支持多個變量
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配置訪問限制