mirror of https://github.com/openresty/openresty
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
6.1 KiB
C
179 lines
6.1 KiB
C
diff -u -r -p -Naur nginx-1.25.3/src/stream/ngx_stream.h nginx-1.25.3-patched/src/stream/ngx_stream.h
|
|
--- nginx-1.25.3/src/stream/ngx_stream.h 2021-11-04 21:27:55.288708527 +0800
|
|
+++ nginx-1.25.3-patched/src/stream/ngx_stream.h 2021-11-04 21:28:50.768035209 +0800
|
|
@@ -254,6 +254,15 @@ typedef struct {
|
|
} ngx_stream_module_t;
|
|
|
|
|
|
+typedef struct {
|
|
+ ngx_msec_t connect_timeout;
|
|
+ ngx_msec_t timeout;
|
|
+} ngx_stream_proxy_ctx_t;
|
|
+
|
|
+
|
|
+#define NGX_STREAM_HAVE_PROXY_TIMEOUT_FIELDS_PATCH 1
|
|
+
|
|
+
|
|
#define NGX_STREAM_MODULE 0x4d525453 /* "STRM" */
|
|
|
|
#define NGX_STREAM_MAIN_CONF 0x02000000
|
|
@@ -307,6 +316,7 @@ void ngx_stream_finalize_session(ngx_str
|
|
extern ngx_module_t ngx_stream_module;
|
|
extern ngx_uint_t ngx_stream_max_module;
|
|
extern ngx_module_t ngx_stream_core_module;
|
|
+extern ngx_module_t ngx_stream_proxy_module;
|
|
|
|
|
|
typedef ngx_int_t (*ngx_stream_filter_pt)(ngx_stream_session_t *s,
|
|
diff -u -r -p -Naur nginx-1.25.3/src/stream/ngx_stream_proxy_module.c nginx-1.25.3-patched/src/stream/ngx_stream_proxy_module.c
|
|
--- nginx-1.25.3/src/stream/ngx_stream_proxy_module.c 2021-11-04 21:27:55.289708533 +0800
|
|
+++ nginx-1.25.3-patched/src/stream/ngx_stream_proxy_module.c 2021-11-04 21:37:03.578936990 +0800
|
|
@@ -400,6 +400,7 @@ ngx_stream_proxy_handler(ngx_stream_sess
|
|
ngx_stream_proxy_srv_conf_t *pscf;
|
|
ngx_stream_upstream_srv_conf_t *uscf, **uscfp;
|
|
ngx_stream_upstream_main_conf_t *umcf;
|
|
+ ngx_stream_proxy_ctx_t *pctx;
|
|
|
|
c = s->connection;
|
|
|
|
@@ -408,6 +409,17 @@ ngx_stream_proxy_handler(ngx_stream_sess
|
|
ngx_log_debug0(NGX_LOG_DEBUG_STREAM, c->log, 0,
|
|
"proxy connection handler");
|
|
|
|
+ pctx = ngx_palloc(c->pool, sizeof(ngx_stream_proxy_ctx_t));
|
|
+ if (pctx == NULL) {
|
|
+ ngx_stream_proxy_finalize(s, NGX_STREAM_INTERNAL_SERVER_ERROR);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ pctx->connect_timeout = pscf->connect_timeout;
|
|
+ pctx->timeout = pscf->timeout;
|
|
+
|
|
+ ngx_stream_set_ctx(s, pctx, ngx_stream_proxy_module);
|
|
+
|
|
u = ngx_pcalloc(c->pool, sizeof(ngx_stream_upstream_t));
|
|
if (u == NULL) {
|
|
ngx_stream_proxy_finalize(s, NGX_STREAM_INTERNAL_SERVER_ERROR);
|
|
@@ -699,6 +711,7 @@ ngx_stream_proxy_connect(ngx_stream_sess
|
|
ngx_connection_t *c, *pc;
|
|
ngx_stream_upstream_t *u;
|
|
ngx_stream_proxy_srv_conf_t *pscf;
|
|
+ ngx_stream_proxy_ctx_t *ctx;
|
|
|
|
c = s->connection;
|
|
|
|
@@ -706,6 +719,8 @@ ngx_stream_proxy_connect(ngx_stream_sess
|
|
|
|
pscf = ngx_stream_get_module_srv_conf(s, ngx_stream_proxy_module);
|
|
|
|
+ ctx = ngx_stream_get_module_ctx(s, ngx_stream_proxy_module);
|
|
+
|
|
u = s->upstream;
|
|
|
|
u->connected = 0;
|
|
@@ -774,7 +789,7 @@ ngx_stream_proxy_connect(ngx_stream_sess
|
|
pc->read->handler = ngx_stream_proxy_connect_handler;
|
|
pc->write->handler = ngx_stream_proxy_connect_handler;
|
|
|
|
- ngx_add_timer(pc->write, pscf->connect_timeout);
|
|
+ ngx_add_timer(pc->write, ctx->connect_timeout);
|
|
}
|
|
|
|
|
|
@@ -957,12 +957,14 @@ ngx_stream_proxy_init_upstream(ngx_stream_session_t *s)
|
|
static ngx_int_t
|
|
ngx_stream_proxy_send_proxy_protocol(ngx_stream_session_t *s)
|
|
{
|
|
- u_char *p;
|
|
- ssize_t n, size;
|
|
- ngx_connection_t *c, *pc;
|
|
- ngx_stream_upstream_t *u;
|
|
- ngx_stream_proxy_srv_conf_t *pscf;
|
|
- u_char buf[NGX_PROXY_PROTOCOL_V1_MAX_HEADER];
|
|
+ u_char *p;
|
|
+ u_char buf[NGX_PROXY_PROTOCOL_V1_MAX_HEADER];
|
|
+ ssize_t n, size;
|
|
+ ngx_connection_t *c, *pc;
|
|
+ ngx_stream_upstream_t *u;
|
|
+ ngx_stream_proxy_ctx_t *ctx;
|
|
+
|
|
+ ctx = ngx_stream_get_module_ctx(s, ngx_stream_proxy_module);
|
|
|
|
c = s->connection;
|
|
|
|
@@ -976,9 +993,7 @@ ngx_stream_proxy_send_proxy_protocol(ngx
|
|
return NGX_ERROR;
|
|
}
|
|
|
|
- pscf = ngx_stream_get_module_srv_conf(s, ngx_stream_proxy_module);
|
|
-
|
|
- ngx_add_timer(pc->write, pscf->timeout);
|
|
+ ngx_add_timer(pc->write, ctx->timeout);
|
|
|
|
pc->write->handler = ngx_stream_proxy_connect_handler;
|
|
|
|
@@ -1053,6 +1068,9 @@ ngx_stream_proxy_ssl_init_connection(ngx
|
|
ngx_connection_t *pc;
|
|
ngx_stream_upstream_t *u;
|
|
ngx_stream_proxy_srv_conf_t *pscf;
|
|
+ ngx_stream_proxy_ctx_t *ctx;
|
|
+
|
|
+ ctx = ngx_stream_get_module_ctx(s, ngx_stream_proxy_module);
|
|
|
|
u = s->upstream;
|
|
|
|
@@ -1099,7 +1117,7 @@ ngx_stream_proxy_ssl_init_connection(ngx
|
|
if (rc == NGX_AGAIN) {
|
|
|
|
if (!pc->write->timer_set) {
|
|
- ngx_add_timer(pc->write, pscf->connect_timeout);
|
|
+ ngx_add_timer(pc->write, ctx->connect_timeout);
|
|
}
|
|
|
|
pc->ssl->handler = ngx_stream_proxy_ssl_handshake;
|
|
@@ -1408,6 +1426,7 @@ ngx_stream_proxy_process_connection(ngx_
|
|
ngx_stream_session_t *s;
|
|
ngx_stream_upstream_t *u;
|
|
ngx_stream_proxy_srv_conf_t *pscf;
|
|
+ ngx_stream_proxy_ctx_t *ctx;
|
|
|
|
c = ev->data;
|
|
s = c->data;
|
|
@@ -1419,6 +1438,8 @@ ngx_stream_proxy_process_connection(ngx_
|
|
return;
|
|
}
|
|
|
|
+ ctx = ngx_stream_get_module_ctx(s, ngx_stream_proxy_module);
|
|
+
|
|
c = s->connection;
|
|
pc = u->peer.connection;
|
|
|
|
@@ -1438,7 +1459,7 @@ ngx_stream_proxy_process_connection(ngx_
|
|
}
|
|
|
|
if (u->connected && !c->read->delayed && !pc->read->delayed) {
|
|
- ngx_add_timer(c->write, pscf->timeout);
|
|
+ ngx_add_timer(c->write, ctx->timeout);
|
|
}
|
|
|
|
return;
|
|
@@ -1600,6 +1621,9 @@ ngx_stream_proxy_process(ngx_stream_sess
|
|
ngx_log_handler_pt handler;
|
|
ngx_stream_upstream_t *u;
|
|
ngx_stream_proxy_srv_conf_t *pscf;
|
|
+ ngx_stream_proxy_ctx_t *ctx;
|
|
+
|
|
+ ctx = ngx_stream_get_module_ctx(s, ngx_stream_proxy_module);
|
|
|
|
u = s->upstream;
|
|
|
|
@@ -1807,7 +1831,7 @@ ngx_stream_proxy_process(ngx_stream_sess
|
|
}
|
|
|
|
if (!c->read->delayed && !pc->read->delayed) {
|
|
- ngx_add_timer(c->write, pscf->timeout);
|
|
+ ngx_add_timer(c->write, ctx->timeout);
|
|
|
|
} else if (c->write->timer_set) {
|
|
ngx_del_timer(c->write);
|