diff 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
line wrap: on
line diff
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -633,8 +633,18 @@ ngx_http_upstream_init_request(ngx_http_
         u->ssl_name = u->resolved->host;
 #endif
 
+        host = &u->resolved->host;
+
         if (u->resolved->sockaddr) {
 
+            if (u->resolved->port == 0) {
+                ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+                              "no port in upstream \"%V\"", host);
+                ngx_http_upstream_finalize_request(r, u,
+                                                   NGX_HTTP_INTERNAL_SERVER_ERROR);
+                return;
+            }
+
             if (ngx_http_upstream_create_round_robin_peer(r, u->resolved)
                 != NGX_OK)
             {
@@ -648,8 +658,6 @@ ngx_http_upstream_init_request(ngx_http_
             return;
         }
 
-        host = &u->resolved->host;
-
         umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module);
 
         uscfp = umcf->upstreams.elts;