详解nginxupstream配置和作用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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变量来获取。
需要注意的是只有最后⼀个响应的头会被保留下来。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。