# HG changeset patch # User Pavel V. Rochnyack <pavel2...@ngs.ru> # Date 1454835814 -21600 # Node ID f7caa68ea80358a035ab766bdb62676522ec529f # Parent 3577c021f21eb4de6d09c1d624ba77ee9ee1eb6d Limit req, Limit conn: The "off" parameter of the 'limit_conn' and 'limit_req' directives.
Added support for inherited "limit_conn" and "limit_req" directives disable. diff -r 3577c021f21e -r f7caa68ea803 src/http/modules/ngx_http_limit_conn_module.c --- a/src/http/modules/ngx_http_limit_conn_module.c Fri Feb 05 21:48:25 2016 +0300 +++ b/src/http/modules/ngx_http_limit_conn_module.c Sun Feb 07 15:03:34 2016 +0600 @@ -40,6 +40,7 @@ ngx_array_t limits; ngx_uint_t log_level; ngx_uint_t status_code; + ngx_uint_t off; /* unsigned off:1 */ } ngx_http_limit_conn_conf_t; @@ -82,7 +83,7 @@ NULL }, { ngx_string("limit_conn"), - NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2, + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE12, ngx_http_limit_conn, NGX_HTTP_LOC_CONF_OFFSET, 0, @@ -160,6 +161,10 @@ lccf = ngx_http_get_module_loc_conf(r, ngx_http_limit_conn_module); limits = lccf->limits.elts; + if (lccf->off) { + return NGX_DECLINED; + } + for (i = 0; i < lccf->limits.nelts; i++) { ctx = limits[i].shm_zone->data; @@ -466,6 +471,7 @@ conf->log_level = NGX_CONF_UNSET_UINT; conf->status_code = NGX_CONF_UNSET_UINT; + conf->off = NGX_CONF_UNSET_UINT; return conf; } @@ -478,6 +484,7 @@ ngx_http_limit_conn_conf_t *conf = child; if (conf->limits.elts == NULL) { + ngx_conf_merge_uint_value(conf->off, prev->off, 0); conf->limits = prev->limits; } @@ -603,6 +610,13 @@ value = cf->args->elts; + lccf->off = 0; + + if (ngx_strcmp(value[1].data, "off") == 0 && cf->args->nelts == 2) { + lccf->off = 1; + return NGX_CONF_OK; + } + shm_zone = ngx_shared_memory_add(cf, &value[1], 0, &ngx_http_limit_conn_module); if (shm_zone == NULL) { diff -r 3577c021f21e -r f7caa68ea803 src/http/modules/ngx_http_limit_req_module.c --- a/src/http/modules/ngx_http_limit_req_module.c Fri Feb 05 21:48:25 2016 +0300 +++ b/src/http/modules/ngx_http_limit_req_module.c Sun Feb 07 15:03:34 2016 +0600 @@ -53,6 +53,7 @@ ngx_uint_t limit_log_level; ngx_uint_t delay_log_level; ngx_uint_t status_code; + ngx_uint_t off; /* unsigned off:1 */ } ngx_http_limit_req_conf_t; @@ -172,6 +173,10 @@ lrcf = ngx_http_get_module_loc_conf(r, ngx_http_limit_req_module); limits = lrcf->limits.elts; + if (lrcf->off) { + return NGX_DECLINED; + } + excess = 0; rc = NGX_DECLINED; @@ -698,6 +703,7 @@ conf->limit_log_level = NGX_CONF_UNSET_UINT; conf->status_code = NGX_CONF_UNSET_UINT; + conf->off = NGX_CONF_UNSET_UINT; return conf; } @@ -710,6 +716,7 @@ ngx_http_limit_req_conf_t *conf = child; if (conf->limits.elts == NULL) { + ngx_conf_merge_uint_value(conf->off, prev->off, 0); conf->limits = prev->limits; } @@ -870,6 +877,19 @@ value = cf->args->elts; + lrcf->off = 0; + + if (ngx_strcmp(value[1].data, "off") == 0) { + lrcf->off = 1; + if (cf->args->nelts == 2) { + return NGX_CONF_OK; + } + + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid parameter \"%V\"", &value[2]); + return NGX_CONF_ERROR; + } + shm_zone = NULL; burst = 0; nodelay = 0; _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel