how proxy_next_upstream control retry times

Maxim Dounin mdounin at mdounin.ru
Wed Feb 6 10:47:28 UTC 2013


Hello!

On Wed, Feb 06, 2013 at 11:23:24AM +0800, 李文伟 wrote:

> hi:
> now i am looking for a 50x retry method, config like this:
> 
> 
> 
>    upstream jboss8080 {
>     server                        10.1.2.164:8080 weight=1 max_fails=1
> fail_timeout=2s;
>     server                        10.1.2.174:8080 weight=1 max_fails=1
> fail_timeout=2s;
>     server                        10.1.2.209:8080 weight=1 max_fails=1
> fail_timeout=2s;
>     server                        10.1.7.136:8080 weight=1 max_fails=1
> fail_timeout=2s;
>     server                        10.1.7.137:8080 weight=1 max_fails=1
> fail_timeout=2s;
>     server                        10.1.7.138:8080 weight=1 max_fails=1
> fail_timeout=2s;
>   }
> 
>   server {
> ........
>     location / {
> proxy_next_upstream http_500 http_502 http_503 http_504 timeout error
> invalid_header;
> .......
>       if ( !-f $request_filename ) {
> proxy_pass                http://jboss8080;
> break;
>       }
>     }
> 
>     error_page                    500 502 503 504  /50x.html;
>       location = /50x.html {
>       root                        html;
>     }
>   }
> 
> 
> then how proxy_next_upstream control retry times.

Quote from http://nginx.org/r/upstream:

: If an error occurs when communicating with the server, a request 
: will be passed to the next server, and so on until all of the 
: functioning servers will be tried. If a successful response could 
: not be obtained from any of the servers, the client will be 
: returned the result of contacting the last server.

That is, errors are handled as they appear, and there is no 
retry-specific controls except proxy_next_upstream itself.  In a 
worst case all servers will be tried.

> by the way, i used error_page, config like this:
> 
> 
> upstream backend  {
>   server localhost:8080 weight=5;
> }
> 
> upstream backup1  {
>   server localhost:8081 weight=5;
> }
> 
> upstream backup2  {
>   server localhost:8082 weight=5;
> }
> 
>     server {
> listen       80;
> server_name  localhost;
> proxy_intercept_errors on;
> 
> location / {
>     error_page  502 @backup1;
>     proxy_pass  http://backend;
> }
> 
> location @backup1 {
>     error_page  502 @backup2;
>     proxy_pass http://backup1;
> }
> 
> location @backup2 {
>     proxy_pass http://backup2;
> }
>      }
> 
> @backup1works, but @backup2 doesn't.
> how can i let backup2 works.

http://nginx.org/r/recursive_error_pages

-- 
Maxim Dounin
http://nginx.com/support.html



More information about the nginx mailing list