Issue with upstream
Maxim Dounin
mdounin at mdounin.ru
Tue Nov 16 17:49:16 MSK 2010
Hello!
On Tue, Nov 16, 2010 at 01:16:25PM +0000, Phil Bayfield wrote:
> I'm having some problems configuring upstream servers with localhost backup
> (error page)
>
> upstream backend1 {
> server 1.2.3.4;
> server 2.3.4.5;
> server localhost backup;
> }
>
> upstream backend2 {
> server 3.4.5.6;
> server 4.5.6.7;
> }
>
> Works, but:
>
> upstream backend1 {
> server 1.2.3.4;
> server 2.3.4.5;
> server localhost backup;
> }
>
> upstream backend2 {
> server 3.4.5.6;
> server 4.5.6.7;
> server localhost backup;
> }
>
> Causes:
>
> Testing nginx configuration: [emerg]: invalid parameter "backup"
>
> Is this a bug?
Most likely you used backend2 somewhere in proxy_pass before
defining upstream backend2. This is not generally supported and
and shouldn't be allowed, but happens to "work" (though with
several unexpected side effects) for now.
Attached patch makes sure such configuration like
server {
location / {
proxy_pass backend;
...
}
...
}
upstream backend {
...
}
will generate "upstream "backend" defined too late" error during
configuration parsing.
Maxim Dounin
-------------- next part --------------
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -4220,6 +4220,12 @@ ngx_http_upstream_add(ngx_conf_t *cf, ng
return NULL;
}
+ if (flags & NGX_HTTP_UPSTREAM_CREATE) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "upstream \"%V\" defined too late", &u->host);
+ return NULL;
+ }
+
if ((uscfp[i]->flags & NGX_HTTP_UPSTREAM_CREATE) && u->port) {
ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
"upstream \"%V\" may not have port %d",
@@ -4227,14 +4233,6 @@ ngx_http_upstream_add(ngx_conf_t *cf, ng
return NULL;
}
- if ((flags & NGX_HTTP_UPSTREAM_CREATE) && uscfp[i]->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,
- uscfp[i]->file_name, uscfp[i]->line);
- return NULL;
- }
-
if (uscfp[i]->port != u->port) {
continue;
}
More information about the nginx
mailing list