diff options
author | Igor Sysoev <igor@sysoev.ru> | 2008-12-23 19:35:12 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2008-12-23 19:35:12 +0000 |
commit | 302cedceb0f6647e3c7578f5210c458e9efc90b4 (patch) | |
tree | 2b4b8ee78a866e543411e9be5e71cbce16344c8f /src/http/ngx_http_upstream_round_robin.c | |
parent | 8eb5ed2e77c871658e5d204865cc5bfd0f457638 (diff) | |
download | nginx-302cedceb0f6647e3c7578f5210c458e9efc90b4.tar.gz nginx-302cedceb0f6647e3c7578f5210c458e9efc90b4.zip |
variable support for unix sockets in fastcgi_pass and proxy_pass
Diffstat (limited to 'src/http/ngx_http_upstream_round_robin.c')
-rw-r--r-- | src/http/ngx_http_upstream_round_robin.c | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/src/http/ngx_http_upstream_round_robin.c b/src/http/ngx_http_upstream_round_robin.c index 2479baa78..52bd80858 100644 --- a/src/http/ngx_http_upstream_round_robin.c +++ b/src/http/ngx_http_upstream_round_robin.c @@ -279,35 +279,47 @@ ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r, peers->number = ur->naddrs; peers->name = &ur->host; - for (i = 0; i < ur->naddrs; i++) { + if (ur->sockaddr) { + peers->peer[0].sockaddr = ur->sockaddr; + peers->peer[0].socklen = ur->socklen; + peers->peer[0].name = ur->host; + peers->peer[0].weight = 1; + peers->peer[0].current_weight = 1; + peers->peer[0].max_fails = 1; + peers->peer[0].fail_timeout = 10; - len = NGX_INET_ADDRSTRLEN + sizeof(":65536") - 1; + } else { - p = ngx_pnalloc(r->pool, len); - if (p == NULL) { - return NGX_ERROR; - } + for (i = 0; i < ur->naddrs; i++) { - len = ngx_inet_ntop(AF_INET, &ur->addrs[i], p, NGX_INET_ADDRSTRLEN); - len = ngx_sprintf(&p[len], ":%d", ur->port) - p; + len = NGX_INET_ADDRSTRLEN + sizeof(":65536") - 1; - sin = ngx_pcalloc(r->pool, sizeof(struct sockaddr_in)); - if (sin == NULL) { - return NGX_ERROR; - } + p = ngx_pnalloc(r->pool, len); + if (p == NULL) { + return NGX_ERROR; + } - sin->sin_family = AF_INET; - sin->sin_port = htons(ur->port); - sin->sin_addr.s_addr = ur->addrs[i]; + len = ngx_inet_ntop(AF_INET, &ur->addrs[i], p, NGX_INET_ADDRSTRLEN); + len = ngx_sprintf(&p[len], ":%d", ur->port) - p; - peers->peer[i].sockaddr = (struct sockaddr *) sin; - peers->peer[i].socklen = sizeof(struct sockaddr_in); - peers->peer[i].name.len = len; - peers->peer[i].name.data = p; - peers->peer[i].weight = 1; - peers->peer[i].current_weight = 1; - peers->peer[i].max_fails = 1; - peers->peer[i].fail_timeout = 10; + sin = ngx_pcalloc(r->pool, sizeof(struct sockaddr_in)); + if (sin == NULL) { + return NGX_ERROR; + } + + sin->sin_family = AF_INET; + sin->sin_port = htons(ur->port); + sin->sin_addr.s_addr = ur->addrs[i]; + + peers->peer[i].sockaddr = (struct sockaddr *) sin; + peers->peer[i].socklen = sizeof(struct sockaddr_in); + peers->peer[i].name.len = len; + peers->peer[i].name.data = p; + peers->peer[i].weight = 1; + peers->peer[i].current_weight = 1; + peers->peer[i].max_fails = 1; + peers->peer[i].fail_timeout = 10; + } } rrp->peers = peers; |