我想在安全的并发请求下保护我的nginx服务器,所以我设置了nginx服务器(nginx 1.6.2)限制在30000 qps的配置如下:
x
但是nginx服务器只有6000 qps,我有很多限制错误。
我曾尝试阅读源代码,原因是我找到了这个(source link):
the listbox
我认为有一个错误:
limit_req_zone $server_port zone=perport:10m rate=30000r/s;
limit_req_status 597;
limit_req zone=perport burst=0 nodelay;
为0时,379: tp = ngx_timeofday();
380: now = (ngx_msec_t) (tp->sec * 1000 + tp->msec);
...
409: ms = (ngx_msec_int_t) (now - lr->last);
410:
411: excess = lr->excess - ctx->rate * ngx_abs(ms) / 1000 + 1000;
...
419: if ((ngx_uint_t) excess > limit->burst) {
420: return NGX_BUSY;
...
值不会影响ngx_abs(ms)
无论设置为何值。 rate
将为excess
excess
,请求将为1000
。原因我使用NGX_BUSY
作为哈希键,或者使用并发请求的其他任何键,无论我将费率设置为burst
,server_port
还是30000r/s
,它没有任何意义。
我阅读了最新的nginx(1.11.6) code,看起来没有变化。