aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/http/ngx_http_request.h1
-rw-r--r--src/http/ngx_http_write_filter_module.c12
2 files changed, 9 insertions, 4 deletions
diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h
index bd842df7e..1babeb2b0 100644
--- a/src/http/ngx_http_request.h
+++ b/src/http/ngx_http_request.h
@@ -420,6 +420,7 @@ struct ngx_http_request_s {
#endif
size_t limit_rate;
+ size_t limit_rate_after;
/* used to learn the Apache compatible response length without a header */
size_t header_size;
diff --git a/src/http/ngx_http_write_filter_module.c b/src/http/ngx_http_write_filter_module.c
index 5594c7faa..f74dbc8ab 100644
--- a/src/http/ngx_http_write_filter_module.c
+++ b/src/http/ngx_http_write_filter_module.c
@@ -207,8 +207,12 @@ ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
}
if (r->limit_rate) {
+ if (r->limit_rate_after == 0) {
+ r->limit_rate_after = clcf->limit_rate_after;
+ }
+
limit = (off_t) r->limit_rate * (ngx_time() - r->start_sec + 1)
- - (c->sent - clcf->limit_rate_after);
+ - (c->sent - r->limit_rate_after);
if (limit <= 0) {
c->write->delayed = 1;
@@ -249,14 +253,14 @@ ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
nsent = c->sent;
- if (clcf->limit_rate_after) {
+ if (r->limit_rate_after) {
- sent -= clcf->limit_rate_after;
+ sent -= r->limit_rate_after;
if (sent < 0) {
sent = 0;
}
- nsent -= clcf->limit_rate_after;
+ nsent -= r->limit_rate_after;
if (nsent < 0) {
nsent = 0;
}