Mercurial > hg > nginx
comparison src/http/ngx_http_upstream.c @ 6303:a93345ee8f52
Upstream: fixed "no port" detection in evaluated upstreams.
If an upstream with variables evaluated to address without a port,
then instead of a "no port in upstream" error an attempt was made
to connect() which failed with EADDRNOTAVAIL.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Sat, 21 Nov 2015 10:44:07 +0300 |
parents | 4d5ac1a31d44 |
children | b1858fc47e3b |
comparison
equal
deleted
inserted
replaced
6302:bec5b3093337 | 6303:a93345ee8f52 |
---|---|
631 | 631 |
632 #if (NGX_HTTP_SSL) | 632 #if (NGX_HTTP_SSL) |
633 u->ssl_name = u->resolved->host; | 633 u->ssl_name = u->resolved->host; |
634 #endif | 634 #endif |
635 | 635 |
636 host = &u->resolved->host; | |
637 | |
636 if (u->resolved->sockaddr) { | 638 if (u->resolved->sockaddr) { |
639 | |
640 if (u->resolved->port == 0) { | |
641 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, | |
642 "no port in upstream \"%V\"", host); | |
643 ngx_http_upstream_finalize_request(r, u, | |
644 NGX_HTTP_INTERNAL_SERVER_ERROR); | |
645 return; | |
646 } | |
637 | 647 |
638 if (ngx_http_upstream_create_round_robin_peer(r, u->resolved) | 648 if (ngx_http_upstream_create_round_robin_peer(r, u->resolved) |
639 != NGX_OK) | 649 != NGX_OK) |
640 { | 650 { |
641 ngx_http_upstream_finalize_request(r, u, | 651 ngx_http_upstream_finalize_request(r, u, |
645 | 655 |
646 ngx_http_upstream_connect(r, u); | 656 ngx_http_upstream_connect(r, u); |
647 | 657 |
648 return; | 658 return; |
649 } | 659 } |
650 | |
651 host = &u->resolved->host; | |
652 | 660 |
653 umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module); | 661 umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module); |
654 | 662 |
655 uscfp = umcf->upstreams.elts; | 663 uscfp = umcf->upstreams.elts; |
656 | 664 |