ngx_parse_url() saves port text, this allows to use it in proxy host header
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index d7a3cd1..702d645 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -417,6 +417,9 @@
return NGX_ERROR;
}
+ u->port_text.len = port_len;
+ u->port_text.data = port_start;
+
} else {
port = ngx_atoi(p, len);
diff --git a/src/core/ngx_inet.h b/src/core/ngx_inet.h
index b2444b9..509f80a 100644
--- a/src/core/ngx_inet.h
+++ b/src/core/ngx_inet.h
@@ -35,6 +35,7 @@
ngx_str_t url;
ngx_str_t host;
+ ngx_str_t port_text;
ngx_str_t uri;
in_port_t port;
diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c
index 69a12e0..977de46 100644
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -2645,8 +2645,6 @@
ngx_http_proxy_set_vars(ngx_pool_t *pool, ngx_url_t *u,
ngx_http_proxy_vars_t *v)
{
- u_char *p;
-
if (!u->unix_socket) {
if (u->no_port || u->port == u->default_port) {
v->host_header = u->host;
@@ -2661,16 +2659,9 @@
}
} else {
- p = ngx_palloc(pool, u->host.len + sizeof(":65536") - 1);
- if (p == NULL) {
- return NGX_ERROR;
- }
-
- v->host_header.len = ngx_sprintf(p, "%V:%d", &u->host, u->port) - p;
- v->host_header.data = p;
-
- v->port.len = v->host_header.len - u->host.len - 1;
- v->port.data = p + u->host.len + 1;
+ v->host_header.len = u->host.len + 1 + u->port_text.len;
+ v->host_header.data = u->host.data;
+ v->port = u->port_text;
}
} else {