详解nginxupstream配置和作用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

详解nginxupstream配置和作⽤
配置例⼦
upstream backend {
server weight=5;
server :8080;
server unix:/tmp/backend3;
server :8080 backup;
server :8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
指令
语法:upstream name { ... }
默认值:—
上下⽂:http
定义⼀组服务器。

这些服务器可以监听不同的端⼝。

⽽且,监听在TCP和UNIX域套接字的服务器可以混⽤。

例⼦:
upstream backend {
server weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
默认情况下,nginx按加权轮转的⽅式将请求分发到各服务器。

在上⾯的例⼦中,每7个请求会通过以下⽅式分发: 5个请求分到,⼀个请求分到第⼆个服务器,⼀个请求分到第三个服务器。

与服务器通信的时候,如果出现错误,请求会被传给下⼀个服务器,直到所有可⽤的服务器都被尝试过。

如果所有服务器都返回失败,客户端将会得到最后通信的那个服务器的(失败)响应结果。

语法:server address [parameters];
默认值:—
上下⽂:upstream
定义服务器的地址address和其他参数parameters。

地址可以是域名或者IP地址,端⼝是可选的,或者是指定“unix:”前缀的UNIX域套接字的路径。

如果没有指定端⼝,就使⽤80端⼝。

如果⼀个域名解析到多个IP,本质上是定义了多个server。

你可以定义下⾯的参数:weight=number设定服务器的权重,默认是1。

max_fails=number设定Nginx与服务器通信的尝试失败的次数。

在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可⽤。

在下⼀个fail_timeout 时间段,服务器不会再被尝试。

失败的尝试次数默认是1。

设为0就会停⽌统计尝试次数,认为服务器是⼀直可⽤的。

你可以通过指令proxy_next_upstream、 fastcgi_next_upstream和memcached_next_upstream来配置什么是失败的尝试。

默认配置时,http_404状态不被认为是失败的尝试。

fail_timeout=time设定
统计失败尝试次数的时间段。

在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可⽤。

服务器被认为不可⽤的时间段。

默认情况下,该超时时间是10秒。

backup标记为备⽤服务器。

当主服务器不可⽤以后,请求会被传给这些服务器。

down标记服务器永久不可⽤,可以跟ip_hash指令⼀起使⽤。

Example:
upstream backend {
server weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server :8080 backup;
}
语法:ip_hash;
默认值:—
上下⽂:upstream
指定服务器组的负载均衡⽅法,请求基于客户端的IP地址在服务器间进⾏分发。

IPv4地址的前三个字节或者IPv6的整个地址,会被⽤来作为⼀个散列key。

这种⽅法可以确保从同⼀个客户端过来的请求,会被传给同⼀台服务器。

除了当服务器被认为不可⽤的时候,这些客户端的请求会被传给其他服务器,⽽且很有可能也是同⼀台服务器。

从1.3.2和1.2.2版本开始⽀持IPv6地址。

如果其中⼀个服务器想暂时移除,应该加上down参数。

这样可以保留当前客户端IP地址散列分布。

例⼦:
upstream backend {
ip_hash;
server ;
server ;
server down;
server ;
}
从1.3.1和1.2.2版本开始,ip_hash的负载均衡⽅法才⽀持设置服务器权重值。

语法:keepalive connections;
默认值:—
上下⽂:upstream
这个指令出现在版本 1.1.4.
激活对上游服务器的连接进⾏缓存。

connections参数设置每个worker进程与后端服务器保持连接的最⼤数量。

这些保持的连接会被放⼊缓存。

如果连接数⼤于这个值时,最久未使⽤的连接会被关闭。

需要注意的是,keepalive指令不会限制Nginx进程与上游服务器的连接总数。

新的连接总会按需被创建。

connections参数应该稍微设低⼀点,以便上游服务器也能处理额外新进来的连接。

配置memcached上游服务器连接keepalive的例⼦:
upstream memcached_backend {
server 127.0.0.1:11211;
server 10.0.0.2:11211;
keepalive 32;
}
server {
...
location /memcached/ {
set $memcached_key $uri;
memcached_pass memcached_backend;
}
}
对于HTTP代理,proxy_http_version指令应该设置为“1.1”,同时“Connection”头的值也应被清空。

upstream http_backend {
server 127.0.0.1:8080;
keepalive 16;
}
server {
...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}
另外⼀种选择是,HTTP/1.0协议的持久连接也可以通过发送“Connection: Keep-Alive”头来实现。

不过不建议这样⽤。

对于FastCGI的服务器,需要设置 fastcgi_keep_conn 指令来让连接keepalive⼯作:
upstream fastcgi_backend {
server 127.0.0.1:9000;
keepalive 8;
}
server {
...
location /fastcgi/ {
fastcgi_pass fastcgi_backend;
fastcgi_keep_conn on;
...
}
}
当使⽤的负载均衡⽅法不是默认的轮转法时,必须在keepalive 指令之前配置。

针对SCGI和uwsgi协议,还没有实现其keepalive连接的打算。

语法:least_conn;
默认值:—
上下⽂:upstream
这个指令出现在版本 1.3.1 和 1.2.2.
指定服务器组的负载均衡⽅法,根据其权重值,将请求发送到活跃连接数最少的那台服务器。

如果这样的服务器有多台,那就采取有权重的轮转法进⾏尝试。

嵌⼊的变量
ngx_http_upstream_module模块⽀持以下嵌⼊变量:
$upstream_addr保存服务器的IP地址和端⼝或者是UNIX域套接字的路径。

在请求处理过程中,如果有多台服务器被尝试了,它们的地址会被拼接起来,以逗号隔开,⽐如: “192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock”。

如果在服务器之间通过“X-Accel-Redirect”头或者error_page有内部跳转,那么这些服务器组之间会以冒号隔开,⽐如:“192.168.1.1:80,
192.168.1.2:80, unix:/tmp/sock : 192.168.10.1:80, 192.168.10.2:80”。

$upstream_response_time以毫秒的精度保留服务器的响应时间,(输出)单位是秒。

出现多个响应时,也是以逗号和冒号隔开。

$upstream_status保存服务器的响应代码。

出现多个响应时,也是以逗号和冒号隔开。

$upstream_http_...保存服务器的响应头的值。

⽐如“Server”响应头的值可以通过$upstream_http_server变量来获取。

需要注意的是只有最后⼀个响应的头会被保留下来。

以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

相关文档
最新文档