Welcome! Log In Create A New Profile

Advanced

[nginx] Upstream keepalive: keepalive_timeout directive.

Maxim Dounin
August 10, 2018 04:04PM
details: http://hg.nginx.org/nginx/rev/d9029e113a05
branches:
changeset: 7339:d9029e113a05
user: Maxim Dounin <mdounin@mdounin.ru>
date: Fri Aug 10 21:54:23 2018 +0300
description:
Upstream keepalive: keepalive_timeout directive.

The directive configures maximum time a connection can be kept in the
cache. By configuring a time which is smaller than the corresponding
timeout on the backend side one can avoid the race between closing
a connection by the backend and nginx trying to use the same connection
to send a request at the same time.

diffstat:

src/http/modules/ngx_http_upstream_keepalive_module.c | 25 +++++++++++++++---
1 files changed, 20 insertions(+), 5 deletions(-)

diffs (77 lines):

diff --git a/src/http/modules/ngx_http_upstream_keepalive_module.c b/src/http/modules/ngx_http_upstream_keepalive_module.c
--- a/src/http/modules/ngx_http_upstream_keepalive_module.c
+++ b/src/http/modules/ngx_http_upstream_keepalive_module.c
@@ -12,6 +12,7 @@

typedef struct {
ngx_uint_t max_cached;
+ ngx_msec_t timeout;

ngx_queue_t cache;
ngx_queue_t free;
@@ -84,6 +85,13 @@ static ngx_command_t ngx_http_upstream_
0,
NULL },

+ { ngx_string("keepalive_timeout"),
+ NGX_HTTP_UPS_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_msec_slot,
+ NGX_HTTP_SRV_CONF_OFFSET,
+ offsetof(ngx_http_upstream_keepalive_srv_conf_t, timeout),
+ NULL },
+
ngx_null_command
};

@@ -133,6 +141,8 @@ ngx_http_upstream_init_keepalive(ngx_con
kcf = ngx_http_conf_upstream_srv_conf(us,
ngx_http_upstream_keepalive_module);

+ ngx_conf_init_msec_value(kcf->timeout, 60000);
+
if (kcf->original_init_upstream(cf, us) != NGX_OK) {
return NGX_ERROR;
}
@@ -261,6 +271,10 @@ found:
c->write->log = pc->log;
c->pool->log = pc->log;

+ if (c->read->timer_set) {
+ ngx_del_timer(c->read);
+ }
+
pc->connection = c;
pc->cached = 1;

@@ -339,10 +353,9 @@ ngx_http_upstream_free_keepalive_peer(ng

pc->connection = NULL;

- if (c->read->timer_set) {
- c->read->delayed = 0;
- ngx_del_timer(c->read);
- }
+ c->read->delayed = 0;
+ ngx_add_timer(c->read, kp->conf->timeout);
+
if (c->write->timer_set) {
ngx_del_timer(c->write);
}
@@ -393,7 +406,7 @@ ngx_http_upstream_keepalive_close_handle

c = ev->data;

- if (c->close) {
+ if (c->close || c->read->timedout) {
goto close;
}

@@ -486,6 +499,8 @@ ngx_http_upstream_keepalive_create_conf(
* conf->max_cached = 0;
*/

+ conf->timeout = NGX_CONF_UNSET_MSEC;
+
return conf;
}

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] Upstream keepalive: keepalive_timeout directive.

Maxim Dounin 162 August 10, 2018 04:04PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 113
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 254 on July 05, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready