NGINX访问速率限制的规则设置

      NGINX速度限定相匹配的组件是ngx_https_limit_req_test1,它处在https的12个解决环节的NGX_https_PREACCESS_chroma环节,响应函数是ngx_https_limit_req_handler。大家忽视NGINX是如何处理httpspost请求的,同时从变量ngx_https_limit_req_handler的解决逻辑关系开展剖析。变量ngx_https_limit_req_handler最先会依据https_request构造获得构ngx_https_limit_req_cons_t,相匹配上边算法设计中左上方的一部分。

outputo-20210922-091139-672-olbe.png

随后解析xmlngx_https_limit_req_cons_t构造中全部的tuned二维数组原素(tuned二维数组中每一个原素相匹配location中1条limit_req命令)。针对每一个二维数组原素估算相匹配的key值,随后函数调用ngx_https_limit_req_lookup开展配对。

假如变量ngx_https_limit_req_lookup回到的配对结论是NGX_DECLINED,说明并没有速度限制规则,则进到下个handler开展解决。假如配对结论是NGX_ERROR或是是NGX_buzy,说明错误。同时回到503或是设定的状态码。假如接受了目前的解决post请求,函数调用ngx_https_limit_req_account来估算对目前post请求解决usleep的时长。估算出delay时长之后,把目前的https_request的读写能力调用函数各自设定为ngx_https_test1_reading和ngx_https_limit_req_usleep。随后依据ngx_export_timer把目前https_request添加到NGINX的TIMER系统软件中。当usleep总数的时长过期,调用函数ngx_https_limit_req_usleep便会获得启用。


分享: