atom feed11 messages in ru.sysoev.nginxRe: Issue with upstream
FromSent OnAttachments
Phil BayfieldNov 16, 2010 5:16 am 
Phil BayfieldNov 16, 2010 6:27 am 
Maxim DouninNov 16, 2010 6:48 am.txt
Phil BayfieldNov 16, 2010 7:01 am 
Maxim DouninNov 16, 2010 10:24 am 
António P. P. AlmeidaNov 16, 2010 10:31 am 
Maxim DouninNov 16, 2010 11:01 am 
Phil BayfieldNov 16, 2010 12:14 pm 
Maxim DouninNov 16, 2010 12:32 pm 
Phil BayfieldNov 17, 2010 4:36 am 
Maxim DouninJan 5, 2011 11:59 pm.txt
Subject:Re: Issue with upstream
From:Maxim Dounin (mdou@mdounin.ru)
Date:Nov 16, 2010 6:48:41 am
List:ru.sysoev.nginx
Attachments:

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

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; }