1.?upstream
Syntax:?? ?upstream name { ... }
Default:?? ?—
Context:?? ?http
????????upstream块定义了一个上游服务器的集群,便于反向代理中的proxy_pass使用。
2.?server?
Syntax:?? ?server address [parameters];
Default:?? ?—
Context:?? ?upstream
server指定一台上游服务器的名字,该名字可以是域名、ip地址端口、UNIX句柄等,后面可跟参数:
.weight=number
:设置向这台上游服务器转发的权重,默认是1。
.max_fails=number
:该选项与fail_timeout配合使用,指在fail_timeout时间段内,如果向当前的上游服务器转发失败次数超过number,则认为在当前的fail_timeout时间段内这台上游服务器不可用。max_fail默认为1,如果设置为0,表示不检查失败次数。
.fail_timeout=time
:fail_timeout表示该时间段内转发失败多少次后认为上游服务器暂时不可用,用于优化反向代理功能。它与向上游服务器建立连接的超时时间、读取上游服务器的响应超时时间等完全无关。默认为10s。
.down
:表示所有的上游服务器永久下线,只在使用ip_hash配置项时才有用。
.backup
:在使用ip_hash配置项时它是无效的。表示所在的上游服务器只是备份服务器,只有在所有的非备份上游服务器都失效后,才会向所在的上游服务器转发请求。
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
3.?ip_hash?
Syntax:?? ?ip_hash;
Default:?? ?—
Context:?? ?upstream
ip_hash是某个用户的请求始终落在固定的一台上游服务器上。它根据用户端的ip计算出一个key,将key按照upstream集群里的上游服务器数量进行取模,然后以取模后的结果把请求转发到相应的上游服务器中,这样确保了同一个客户端的请求只会转发到指定的上游服务器中。
ip_hash与weight(权重)配置不可同时使用。如果upstream中一台服务器不能使用时,不能直接删除,而是使用down标识,来确保转发策略的一惯性。
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}
?