[nginx] svn commit: r5006 - in trunk/src: core http
ru at nginx.com
ru at nginx.com
Thu Jan 10 12:58:55 UTC 2013
Author: ru
Date: 2013-01-10 12:58:55 +0000 (Thu, 10 Jan 2013)
New Revision: 5006
URL: http://trac.nginx.org/nginx/changeset/5006/nginx
Log:
Fixed "proxy_pass" with IP address and no port (ticket #276).
Upstreams created by "proxy_pass" with IP address and no port were
broken in 1.3.10, by not initializing port in u->sockaddr.
API change: ngx_parse_url() was modified to always initialize port
(in u->sockaddr and in u->port), even for the u->no_resolve case;
ngx_http_upstream() and ngx_http_upstream_add() were adopted.
Modified:
trunk/src/core/ngx_inet.c
trunk/src/http/ngx_http_upstream.c
trunk/src/http/ngx_http_upstream.h
trunk/src/http/ngx_http_upstream_round_robin.c
Modified: trunk/src/core/ngx_inet.c
===================================================================
--- trunk/src/core/ngx_inet.c 2013-01-10 11:38:14 UTC (rev 5005)
+++ trunk/src/core/ngx_inet.c 2013-01-10 12:58:55 UTC (rev 5006)
@@ -707,11 +707,8 @@
}
u->no_port = 1;
-
- if (!u->no_resolve) {
- u->port = u->default_port;
- sin->sin_port = htons(u->default_port);
- }
+ u->port = u->default_port;
+ sin->sin_port = htons(u->default_port);
}
len = last - host;
@@ -868,11 +865,8 @@
} else {
u->no_port = 1;
-
- if (!u->no_resolve) {
- u->port = u->default_port;
- sin6->sin6_port = htons(u->default_port);
- }
+ u->port = u->default_port;
+ sin6->sin6_port = htons(u->default_port);
}
}
Modified: trunk/src/http/ngx_http_upstream.c
===================================================================
--- trunk/src/http/ngx_http_upstream.c 2013-01-10 11:38:14 UTC (rev 5005)
+++ trunk/src/http/ngx_http_upstream.c 2013-01-10 12:58:55 UTC (rev 5006)
@@ -4121,6 +4121,7 @@
value = cf->args->elts;
u.host = value[1];
u.no_resolve = 1;
+ u.no_port = 1;
uscf = ngx_http_upstream_add(cf, &u, NGX_HTTP_UPSTREAM_CREATE
|NGX_HTTP_UPSTREAM_WEIGHT
@@ -4391,14 +4392,14 @@
return NULL;
}
- if ((uscfp[i]->flags & NGX_HTTP_UPSTREAM_CREATE) && u->port) {
+ if ((uscfp[i]->flags & NGX_HTTP_UPSTREAM_CREATE) && !u->no_port) {
ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
"upstream \"%V\" may not have port %d",
&u->host, u->port);
return NULL;
}
- if ((flags & NGX_HTTP_UPSTREAM_CREATE) && uscfp[i]->port) {
+ if ((flags & NGX_HTTP_UPSTREAM_CREATE) && !uscfp[i]->no_port) {
ngx_log_error(NGX_LOG_WARN, cf->log, 0,
"upstream \"%V\" may not have port %d in %s:%ui",
&u->host, uscfp[i]->port,
@@ -4406,7 +4407,9 @@
return NULL;
}
- if (uscfp[i]->port != u->port) {
+ if (uscfp[i]->port && u->port
+ && uscfp[i]->port != u->port)
+ {
continue;
}
@@ -4434,6 +4437,7 @@
uscf->line = cf->conf_file->line;
uscf->port = u->port;
uscf->default_port = u->default_port;
+ uscf->no_port = u->no_port;
if (u->naddrs == 1) {
uscf->servers = ngx_array_create(cf->pool, 1,
Modified: trunk/src/http/ngx_http_upstream.h
===================================================================
--- trunk/src/http/ngx_http_upstream.h 2013-01-10 11:38:14 UTC (rev 5005)
+++ trunk/src/http/ngx_http_upstream.h 2013-01-10 12:58:55 UTC (rev 5006)
@@ -116,6 +116,7 @@
ngx_uint_t line;
in_port_t port;
in_port_t default_port;
+ ngx_uint_t no_port; /* unsigned no_port:1 */
};
Modified: trunk/src/http/ngx_http_upstream_round_robin.c
===================================================================
--- trunk/src/http/ngx_http_upstream_round_robin.c 2013-01-10 11:38:14 UTC (rev 5005)
+++ trunk/src/http/ngx_http_upstream_round_robin.c 2013-01-10 12:58:55 UTC (rev 5006)
@@ -161,7 +161,7 @@
/* an upstream implicitly defined by proxy_pass, etc. */
- if (us->port == 0 && us->default_port == 0) {
+ if (us->port == 0) {
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
"no port in upstream \"%V\" in %s:%ui",
&us->host, us->file_name, us->line);
@@ -171,7 +171,7 @@
ngx_memzero(&u, sizeof(ngx_url_t));
u.host = us->host;
- u.port = (in_port_t) (us->port ? us->port : us->default_port);
+ u.port = us->port;
if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) {
if (u.err) {
More information about the nginx-devel
mailing list