英文原文地址:http://nginx.org/en/docs/http/ngx_http_upstream_module.html
大纲:
- 示例
- 指令
- 嵌入变量
ngx_http_upstream_module模块用来定义一个可以通过proxy_pass, fastcgi_pass和memcached_pass指令引用的服务器群组
示例配置
1 upstream backend { 2 server backend1.example.com weight=5; 3 server backend2.example.com:8080; 4 server unix:/tmp/backend3; 5 6 server backup1.example.com:8080 backup; 7 server backup2.example.com:8080 backup; 8 } 9 10 server { 11 location / { 12 proxy_pass http://backend; 13 } 14 }
动态配置服务器组仅仅在商业版本中可以使用
示例:
1 upstream appservers { 2 zone appservers 64k; 3 4 server appserv1.example.com weight=5; 5 server appserv2.example.com:8080 fail_timeout=5s slow_start=30s; 6 server 192.0.2.1 max_fails=3; 7 8 server reserve1.example.com:8080 backup; 9 server reserve2.example.com:8080 backup; 10 } 11 12 server { 13 location / { 14 proxy_pass http://appservers; 15 health_check; 16 } 17 18 location /upstream_conf { 19 upstream_conf; 20 allow 127.0.0.1; 21 deny all; 22 } 23 }
指令
upstream
语法: upstream name {...} default:-- context:http
示例:
upstream backend { server backend1.example.com weight=5; server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; }
默认情况下,请求会根据权重循环分发到各个服务器。在上面的例子中,每7个请求的分发方法如下:5个请求发给backend1.example.com,第二和第三个服务器分别分发一个请求。如果在通讯过程中一个服务器出现了问题,则这次的请求会被分发给下一个服务器,以此类推,知道所有的服务器都被尝试过一次。如果从所有的服务器中都无法成功请求,客户端会收到最后一个服务器的结果。
server
1 语法: server address [parameters]; 2 default: — 3 context: upstream
给一个服务器指定一个地址和其它参数。地址可以指定为域名或ip(可以指定端口),或使用添加“unix:”前缀的unix套接字(unix-domain socket)。在未指定端口的情况下,默认使用80端口。一个域名解析到多个ip相当于一次设定了多个服务器。(感觉翻译的很别扭)
下面是server中可设定的参数:
- weight=number
设置服务器的权重,默认值为1(值越大表示权重越高)
- max_fails=number
设置服务器最大的失败请求次数(中间还有很多。。。)。默认情况下失败请求次数为1,如果设置为0表示禁用请求计数。在proxy_next_upstream,fastcgi_next_upstream, and memcached_next_upstream 指令中也考虑到了失败请求次数。
- fail_timeout=number
设置:
-
- 请求失败超过特定次数视为服务器不可用
- 请求超时视为服务器不可用
默认情况下此参数的值为10秒
- slow_start=time
当一个服务器从不健康变为健康或从不可用到可用时设置过多长时把服务器的权重从0恢复为原设置的值。默认值为1,即是被禁用的。
注:仅商业版可用
- backup
把此服务器标记为备用服务器。当主服务器不可用时会把请求分发到备用服务器。
- down
把一个服务器标记为永久不可用;通常和 ip_hash指令一起使用
示例:
1 upstream backend { 2 server backend1.example.com weight=5; 3 server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; 4 server unix:/tmp/backend3; 5 6 server backup1.example.com:8080 backup; 7 }
注:如果在服务器组中只有一个服务器,max_fails,fail_time_out和 slow_start参数将会被忽略,而且这个服务器也永远不会被标记为不可用。
zone
syntax: zone name size;
default: —
context: upstream