nginx.conf中可以将location反向代理到一个或多个上游服务器处理,其中多个上游服务器可以配置成一个上游服务器组,并定义相应的NLB策略来相应请求,比如默认的轮询、最少连接数、IP哈希、权重等。
我们考虑另外一种主从的场景,只要主服务器可以正常响应就一直由主服务器处理请求,当主服务器响应出错时,再由从服务器来处理请求。那么location段可以这样配置:
location /api/ {
proxy_pass http://master.demo.com.cn/api;
error_page 502 503 504 = @backup;
}
location @backup {
return 302 https://slave.demo.com.cn/api;
}
如果我们还想再多尝试访问一次主服务器确实不好使再转向从服务器的话,可以这样写:
location /api/ {
proxy_pass http://master.demo.com.cn/api;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_next_upstream_tries 1;
error_page 502 503 504 = @backup;
}
location @backup {
return 302 https://slave.demo.com.cn/api;
}
proxy_next_upstream 参数一般用于配置了多个上游服务器的上游服务器组,会尝试转发到另外一台上游服务器,不过如果没有没有配置上游服务器组的话,它会对于那唯一的一台服务器再次尝试一次。