mirror of
https://github.com/nginx/nginx.git
synced 2025-02-25 18:55:26 -06:00
Upstream: do not unnecessarily create per-request upstreams.
If proxy_pass (and friends) with variables evaluates an upstream specified with literal address, nginx always created a per-request upstream. Now, if there's a matching upstream specified in the configuration (either implicit or explicit), it will be used instead.
This commit is contained in:
parent
3fae83a91c
commit
149fda55f7
@ -654,6 +654,23 @@ ngx_http_upstream_init_request(ngx_http_request_t *r)
|
||||
|
||||
host = &u->resolved->host;
|
||||
|
||||
umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module);
|
||||
|
||||
uscfp = umcf->upstreams.elts;
|
||||
|
||||
for (i = 0; i < umcf->upstreams.nelts; i++) {
|
||||
|
||||
uscf = uscfp[i];
|
||||
|
||||
if (uscf->host.len == host->len
|
||||
&& ((uscf->port == 0 && u->resolved->no_port)
|
||||
|| uscf->port == u->resolved->port)
|
||||
&& ngx_strncasecmp(uscf->host.data, host->data, host->len) == 0)
|
||||
{
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
|
||||
if (u->resolved->sockaddr) {
|
||||
|
||||
if (u->resolved->port == 0
|
||||
@ -679,23 +696,6 @@ ngx_http_upstream_init_request(ngx_http_request_t *r)
|
||||
return;
|
||||
}
|
||||
|
||||
umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module);
|
||||
|
||||
uscfp = umcf->upstreams.elts;
|
||||
|
||||
for (i = 0; i < umcf->upstreams.nelts; i++) {
|
||||
|
||||
uscf = uscfp[i];
|
||||
|
||||
if (uscf->host.len == host->len
|
||||
&& ((uscf->port == 0 && u->resolved->no_port)
|
||||
|| uscf->port == u->resolved->port)
|
||||
&& ngx_strncasecmp(uscf->host.data, host->data, host->len) == 0)
|
||||
{
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
|
||||
if (u->resolved->port == 0) {
|
||||
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
|
||||
"no port in upstream \"%V\"", host);
|
||||
|
@ -433,6 +433,23 @@ ngx_stream_proxy_handler(ngx_stream_session_t *s)
|
||||
|
||||
host = &u->resolved->host;
|
||||
|
||||
umcf = ngx_stream_get_module_main_conf(s, ngx_stream_upstream_module);
|
||||
|
||||
uscfp = umcf->upstreams.elts;
|
||||
|
||||
for (i = 0; i < umcf->upstreams.nelts; i++) {
|
||||
|
||||
uscf = uscfp[i];
|
||||
|
||||
if (uscf->host.len == host->len
|
||||
&& ((uscf->port == 0 && u->resolved->no_port)
|
||||
|| uscf->port == u->resolved->port)
|
||||
&& ngx_strncasecmp(uscf->host.data, host->data, host->len) == 0)
|
||||
{
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
|
||||
if (u->resolved->sockaddr) {
|
||||
|
||||
if (u->resolved->port == 0
|
||||
@ -456,23 +473,6 @@ ngx_stream_proxy_handler(ngx_stream_session_t *s)
|
||||
return;
|
||||
}
|
||||
|
||||
umcf = ngx_stream_get_module_main_conf(s, ngx_stream_upstream_module);
|
||||
|
||||
uscfp = umcf->upstreams.elts;
|
||||
|
||||
for (i = 0; i < umcf->upstreams.nelts; i++) {
|
||||
|
||||
uscf = uscfp[i];
|
||||
|
||||
if (uscf->host.len == host->len
|
||||
&& ((uscf->port == 0 && u->resolved->no_port)
|
||||
|| uscf->port == u->resolved->port)
|
||||
&& ngx_strncasecmp(uscf->host.data, host->data, host->len) == 0)
|
||||
{
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
|
||||
if (u->resolved->port == 0) {
|
||||
ngx_log_error(NGX_LOG_ERR, c->log, 0,
|
||||
"no port in upstream \"%V\"", host);
|
||||
|
Loading…
Reference in New Issue
Block a user