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