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.
Ruslan Ermilov
6 years ago
772 | 772 | |
773 | 773 | } else { |
774 | 774 | u->resolved->host = url.host; |
775 | u->resolved->port = url.port; | |
776 | u->resolved->no_port = url.no_port; | |
777 | } | |
775 | } | |
776 | ||
777 | u->resolved->port = url.port; | |
778 | u->resolved->no_port = url.no_port; | |
778 | 779 | |
779 | 780 | return NGX_OK; |
780 | 781 | } |
1014 | 1014 | |
1015 | 1015 | } else { |
1016 | 1016 | u->resolved->host = url.host; |
1017 | u->resolved->port = (in_port_t) (url.no_port ? port : url.port); | |
1018 | u->resolved->no_port = url.no_port; | |
1019 | } | |
1017 | } | |
1018 | ||
1019 | u->resolved->port = (in_port_t) (url.no_port ? port : url.port); | |
1020 | u->resolved->no_port = url.no_port; | |
1020 | 1021 | |
1021 | 1022 | return NGX_OK; |
1022 | 1023 | } |
568 | 568 | |
569 | 569 | } else { |
570 | 570 | u->resolved->host = url.host; |
571 | u->resolved->port = url.port; | |
572 | u->resolved->no_port = url.no_port; | |
573 | } | |
571 | } | |
572 | ||
573 | u->resolved->port = url.port; | |
574 | u->resolved->no_port = url.no_port; | |
574 | 575 | |
575 | 576 | return NGX_OK; |
576 | 577 | } |
770 | 770 | |
771 | 771 | } else { |
772 | 772 | u->resolved->host = url.host; |
773 | u->resolved->port = url.port; | |
774 | u->resolved->no_port = url.no_port; | |
775 | } | |
773 | } | |
774 | ||
775 | u->resolved->port = url.port; | |
776 | u->resolved->no_port = url.no_port; | |
776 | 777 | |
777 | 778 | return NGX_OK; |
778 | 779 | } |
632 | 632 | u->ssl_name = u->resolved->host; |
633 | 633 | #endif |
634 | 634 | |
635 | host = &u->resolved->host; | |
636 | ||
635 | 637 | if (u->resolved->sockaddr) { |
638 | ||
639 | if (u->resolved->port == 0) { | |
640 | ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, | |
641 | "no port in upstream \"%V\"", host); | |
642 | ngx_http_upstream_finalize_request(r, u, | |
643 | NGX_HTTP_INTERNAL_SERVER_ERROR); | |
644 | return; | |
645 | } | |
636 | 646 | |
637 | 647 | if (ngx_http_upstream_create_round_robin_peer(r, u->resolved) |
638 | 648 | != NGX_OK) |
646 | 656 | |
647 | 657 | return; |
648 | 658 | } |
649 | ||
650 | host = &u->resolved->host; | |
651 | 659 | |
652 | 660 | umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module); |
653 | 661 |