]> git.kaiwu.me - nginx.git/commitdiff
Upstream: detect port absence in fastcgi_pass with IP literal.
authorRuslan Ermilov <ru@nginx.com>
Thu, 22 Jan 2015 13:23:32 +0000 (16:23 +0300)
committerRuslan Ermilov <ru@nginx.com>
Thu, 22 Jan 2015 13:23:32 +0000 (16:23 +0300)
If fastcgi_pass (or any look-alike that doesn't imply a default
port) is specified as an IP literal (as opposed to a hostname),
port absence was not detected at configuration time and could
result in EADDRNOTAVAIL at run time.

Fixed this in such a way that configs like

http {
    server {
        location / {
            fastcgi_pass 127.0.0.1;
        }
    }

    upstream 127.0.0.1 {
        server 10.0.0.1:12345;
    }
}

still work.  That is, port absence check is delayed until after
we make sure there's no explicit upstream with such a name.

src/http/ngx_http_upstream.c

index a41d5b37743e473563ae1f8fbab62785565e67ea..7a5b3fdc2a55f69a154d16a191d9997c1588d94e 100644 (file)
@@ -5408,7 +5408,7 @@ ngx_http_upstream_add(ngx_conf_t *cf, ngx_url_t *u, ngx_uint_t flags)
     uscf->default_port = u->default_port;
     uscf->no_port = u->no_port;
 
-    if (u->naddrs == 1) {
+    if (u->naddrs == 1 && (u->port || u->family == AF_UNIX)) {
         uscf->servers = ngx_array_create(cf->pool, 1,
                                          sizeof(ngx_http_upstream_server_t));
         if (uscf->servers == NULL) {