diff -r 7ec761f0365f src/event/ngx_event_connect.h
--- a/src/event/ngx_event_connect.h	Thu Oct 26 23:35:09 2023 +0300
+++ b/src/event/ngx_event_connect.h	Sat Nov 11 17:20:26 2023 +0400
@@ -39,6 +39,7 @@
     struct sockaddr                 *sockaddr;
     socklen_t                        socklen;
     ngx_str_t                       *name;
+    ngx_str_t                       *server;
 
     ngx_uint_t                       tries;
     ngx_msec_t                       start_time;
diff -r 7ec761f0365f src/http/modules/ngx_http_proxy_module.c
--- a/src/http/modules/ngx_http_proxy_module.c	Thu Oct 26 23:35:09 2023 +0300
+++ b/src/http/modules/ngx_http_proxy_module.c	Sat Nov 11 17:20:26 2023 +0400
@@ -171,6 +171,8 @@
     ngx_http_variable_value_t *v, uintptr_t data);
 static ngx_int_t ngx_http_proxy_port_variable(ngx_http_request_t *r,
     ngx_http_variable_value_t *v, uintptr_t data);
+static ngx_int_t ngx_http_proxy_peer_host_variable(ngx_http_request_t *r,
+    ngx_http_variable_value_t *v, uintptr_t data);
 static ngx_int_t
     ngx_http_proxy_add_x_forwarded_for_variable(ngx_http_request_t *r,
     ngx_http_variable_value_t *v, uintptr_t data);
@@ -877,6 +879,9 @@
     { ngx_string("proxy_port"), NULL, ngx_http_proxy_port_variable, 0,
       NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
 
+    { ngx_string("proxy_peer_host"), NULL, ngx_http_proxy_peer_host_variable, 0,
+      NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+
     { ngx_string("proxy_add_x_forwarded_for"), NULL,
       ngx_http_proxy_add_x_forwarded_for_variable, 0, NGX_HTTP_VAR_NOHASH, 0 },
 
@@ -2564,6 +2569,25 @@
 
 
 static ngx_int_t
+ngx_http_proxy_peer_host_variable(ngx_http_request_t *r,
+    ngx_http_variable_value_t *v, uintptr_t data)
+{
+    if (r->upstream == NULL || r->upstream->peer.server == NULL) {
+        v->not_found = 1;
+        return NGX_OK;
+    }
+
+    v->len = r->upstream->peer.server->len;
+    v->valid = 1;
+    v->no_cacheable = 0;
+    v->not_found = 0;
+    v->data = r->upstream->peer.server->data;
+
+    return NGX_OK;
+}
+
+
+static ngx_int_t
 ngx_http_proxy_add_x_forwarded_for_variable(ngx_http_request_t *r,
     ngx_http_variable_value_t *v, uintptr_t data)
 {
diff -r 7ec761f0365f src/http/modules/ngx_http_upstream_hash_module.c
--- a/src/http/modules/ngx_http_upstream_hash_module.c	Thu Oct 26 23:35:09 2023 +0300
+++ b/src/http/modules/ngx_http_upstream_hash_module.c	Sat Nov 11 17:20:26 2023 +0400
@@ -266,6 +266,7 @@
     pc->sockaddr = peer->sockaddr;
     pc->socklen = peer->socklen;
     pc->name = &peer->name;
+    pc->server = &peer->server;
 
     peer->conns++;
 
@@ -601,6 +602,7 @@
     pc->sockaddr = best->sockaddr;
     pc->socklen = best->socklen;
     pc->name = &best->name;
+    pc->server = &peer->server;
 
     best->conns++;
 
diff -r 7ec761f0365f src/http/modules/ngx_http_upstream_ip_hash_module.c
--- a/src/http/modules/ngx_http_upstream_ip_hash_module.c	Thu Oct 26 23:35:09 2023 +0300
+++ b/src/http/modules/ngx_http_upstream_ip_hash_module.c	Sat Nov 11 17:20:26 2023 +0400
@@ -236,6 +236,7 @@
     pc->sockaddr = peer->sockaddr;
     pc->socklen = peer->socklen;
     pc->name = &peer->name;
+    pc->server = &peer->server;
 
     peer->conns++;
 
diff -r 7ec761f0365f src/http/modules/ngx_http_upstream_least_conn_module.c
--- a/src/http/modules/ngx_http_upstream_least_conn_module.c	Thu Oct 26 23:35:09 2023 +0300
+++ b/src/http/modules/ngx_http_upstream_least_conn_module.c	Sat Nov 11 17:20:26 2023 +0400
@@ -240,6 +240,7 @@
     pc->sockaddr = best->sockaddr;
     pc->socklen = best->socklen;
     pc->name = &best->name;
+    pc->server = &peer->server;
 
     best->conns++;
 
diff -r 7ec761f0365f src/http/modules/ngx_http_upstream_random_module.c
--- a/src/http/modules/ngx_http_upstream_random_module.c	Thu Oct 26 23:35:09 2023 +0300
+++ b/src/http/modules/ngx_http_upstream_random_module.c	Sat Nov 11 17:20:26 2023 +0400
@@ -282,6 +282,7 @@
     pc->sockaddr = peer->sockaddr;
     pc->socklen = peer->socklen;
     pc->name = &peer->name;
+    pc->server = &peer->server;
 
     peer->conns++;
 
@@ -392,6 +393,7 @@
     pc->sockaddr = peer->sockaddr;
     pc->socklen = peer->socklen;
     pc->name = &peer->name;
+    pc->server = &peer->server;
 
     peer->conns++;
 
diff -r 7ec761f0365f src/http/ngx_http_upstream_round_robin.c
--- a/src/http/ngx_http_upstream_round_robin.c	Thu Oct 26 23:35:09 2023 +0300
+++ b/src/http/ngx_http_upstream_round_robin.c	Sat Nov 11 17:20:26 2023 +0400
@@ -477,6 +477,7 @@
     pc->sockaddr = peer->sockaddr;
     pc->socklen = peer->socklen;
     pc->name = &peer->name;
+    pc->server = &peer->server;
 
     peer->conns++;
 
diff -r 7ec761f0365f src/stream/ngx_stream_upstream_hash_module.c
--- a/src/stream/ngx_stream_upstream_hash_module.c	Thu Oct 26 23:35:09 2023 +0300
+++ b/src/stream/ngx_stream_upstream_hash_module.c	Sat Nov 11 17:20:26 2023 +0400
@@ -265,6 +265,7 @@
     pc->sockaddr = peer->sockaddr;
     pc->socklen = peer->socklen;
     pc->name = &peer->name;
+    pc->server = &peer->server;
 
     peer->conns++;
 
@@ -600,6 +601,7 @@
     pc->sockaddr = best->sockaddr;
     pc->socklen = best->socklen;
     pc->name = &best->name;
+    pc->server = &peer->server;
 
     best->conns++;
 
diff -r 7ec761f0365f src/stream/ngx_stream_upstream_least_conn_module.c
--- a/src/stream/ngx_stream_upstream_least_conn_module.c	Thu Oct 26 23:35:09 2023 +0300
+++ b/src/stream/ngx_stream_upstream_least_conn_module.c	Sat Nov 11 17:20:26 2023 +0400
@@ -236,6 +236,7 @@
     pc->sockaddr = best->sockaddr;
     pc->socklen = best->socklen;
     pc->name = &best->name;
+    pc->server = &peer->server;
 
     best->conns++;
 
diff -r 7ec761f0365f src/stream/ngx_stream_upstream_random_module.c
--- a/src/stream/ngx_stream_upstream_random_module.c	Thu Oct 26 23:35:09 2023 +0300
+++ b/src/stream/ngx_stream_upstream_random_module.c	Sat Nov 11 17:20:26 2023 +0400
@@ -282,6 +282,7 @@
     pc->sockaddr = peer->sockaddr;
     pc->socklen = peer->socklen;
     pc->name = &peer->name;
+    pc->server = &peer->server;
 
     peer->conns++;
 
@@ -392,6 +393,7 @@
     pc->sockaddr = peer->sockaddr;
     pc->socklen = peer->socklen;
     pc->name = &peer->name;
+    pc->server = &peer->server;
 
     peer->conns++;
 
diff -r 7ec761f0365f src/stream/ngx_stream_upstream_round_robin.c
--- a/src/stream/ngx_stream_upstream_round_robin.c	Thu Oct 26 23:35:09 2023 +0300
+++ b/src/stream/ngx_stream_upstream_round_robin.c	Sat Nov 11 17:20:26 2023 +0400
@@ -486,6 +486,7 @@
     pc->sockaddr = peer->sockaddr;
     pc->socklen = peer->socklen;
     pc->name = &peer->name;
+    pc->server = &peer->server;
 
     peer->conns++;
 
