mirror of
				https://github.com/openresty/openresty.git
				synced 2024-10-13 00:29:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			170 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
diff -u -r -p -Naur nginx-1.21.4/src/stream/ngx_stream.h nginx-1.21.4-patched/src/stream/ngx_stream.h
 | 
						|
--- nginx-1.21.4/src/stream/ngx_stream.h	2021-11-04 21:27:55.288708527 +0800
 | 
						|
+++ nginx-1.21.4-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.21.4/src/stream/ngx_stream_proxy_module.c nginx-1.21.4-patched/src/stream/ngx_stream_proxy_module.c
 | 
						|
--- nginx-1.21.4/src/stream/ngx_stream_proxy_module.c	2021-11-04 21:27:55.289708533 +0800
 | 
						|
+++ nginx-1.21.4-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);
 | 
						|
 }
 | 
						|
 
 | 
						|
 
 | 
						|
@@ -948,8 +963,10 @@ ngx_stream_proxy_send_proxy_protocol(ngx
 | 
						|
     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_MAX_HEADER];
 | 
						|
+    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);
 |