aboutsummaryrefslogtreecommitdiff
path: root/src/stream/ngx_stream_proxy_module.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/stream/ngx_stream_proxy_module.c')
-rw-r--r--src/stream/ngx_stream_proxy_module.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/stream/ngx_stream_proxy_module.c b/src/stream/ngx_stream_proxy_module.c
index bbf4f7ec0..0890a04ae 100644
--- a/src/stream/ngx_stream_proxy_module.c
+++ b/src/stream/ngx_stream_proxy_module.c
@@ -742,6 +742,25 @@ ngx_stream_proxy_connect(ngx_stream_session_t *s)
u->state->peer = u->peer.name;
+#if (NGX_STREAM_UPSTREAM_ZONE)
+ if (u->upstream && u->upstream->shm_zone
+ && (u->upstream->flags & NGX_STREAM_UPSTREAM_MODIFY))
+ {
+ u->state->peer = ngx_palloc(s->connection->pool,
+ sizeof(ngx_str_t) + u->peer.name->len);
+ if (u->state->peer == NULL) {
+ ngx_stream_proxy_finalize(s, NGX_STREAM_INTERNAL_SERVER_ERROR);
+ return;
+ }
+
+ u->state->peer->len = u->peer.name->len;
+ u->state->peer->data = (u_char *) (u->state->peer + 1);
+ ngx_memcpy(u->state->peer->data, u->peer.name->data, u->peer.name->len);
+
+ u->peer.name = u->state->peer;
+ }
+#endif
+
if (rc == NGX_BUSY) {
ngx_log_error(NGX_LOG_ERR, c->log, 0, "no live upstreams");
ngx_stream_proxy_finalize(s, NGX_STREAM_BAD_GATEWAY);