nginx模块 ngx_http_upstream_module

2018-07-19 10:13:21

ngx_http_upstream_module 模块可以用来定义服务器群,可以被proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass、grpc_pass等调用。

Syntax:	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;

    server backup1.example.com  backup;
}

默认情况下会根据 weight 来进行轮询访问。上面配置的意思是7次请求里,5次到 backend1.example.com,1次到 127.0.0.1:8080,1次到 unix:/tmp/backend3。


Syntax:	server address [parameters];
Default: —
Context: upstream

定义地址和参数,可以是ip地址和端口,或者是 unix domain socket。

weight=n  定义权重,默认为1。

max_conns=n  定义到该服务器的最大连接数,默认为0不限制。如果不在共享内存里,那么它是针对每个 worker 里的限制。

max_fails=n  根据 fail_timeout 失败多少次才标记为服务器不可用,默认为1。设置为0代表不统计失败次数,也就是访问失败了,还是会被轮询到。

fail_timeout=t  多少时间未响应认定为失败,默认为10秒。

backup  标记为备机,只有在主服务器不可用时才会启用。

down  标记该服务器不可用。

resolve  监视域名地址ip地址的改变,自动改变配置可以不用重启 nginx。前提是服务器群必须在共享内存里,resolver 指令必须在 http 块里指定。

http {
    resolver 10.0.0.1;

    upstream u {
        zone ...;
        ...
        server example.com resolve;
    }
}

route=string  设置服务器路由名。

 slow_start=time  当服务器再次可用时,延迟多少时间才去访问。在标记为 hash,ip_hash 时不能用。

drain  标记服务器为 draining 模式,只有绑定次服务器的请求才会被转发。

Syntax:	zone name [size];
Default: —
Context: upstream

This directive appeared in version 1.9.0.

定义共享内存名和大小。

Syntax:	hash key [consistent];
Default: —
Context: upstream

This directive appeared in version 1.7.2.

客户端和服务端映射绑定,key可以是文本,变量或者是它们的组合。consistent 会利用 ketama 一致性hash。

Syntax:	ip_hash;
Default: —
Context: upstream

nginx 会根据客户端的ip的hash值来决定访问哪个服务器,ipv4取前3个字节,ipv6全部来当做key。

如果需要临时移除服务器,最好标记为 down,而不是删除。这样可以保留当前hash。

upstream backend {
    ip_hash;

    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
    server backend4.example.com;
}
Syntax:	keepalive connections;
Default: —
Context: upstream

This directive appeared in version 1.1.4.

定义多少连接可以被缓存以便后续使用。

memcached 例子

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 "";
        ...
    }
}

对于 FastCGI 服务器,需要设置 fastcgi_keep_conn。

upstream fastcgi_backend {
    server 127.0.0.1:9000;

    keepalive 8;
}

server {
    ...

    location /fastcgi/ {
        fastcgi_pass fastcgi_backend;
        fastcgi_keep_conn on;
        ...
    }
}
Syntax:	least_conn;
Default: —
Context: upstream

This directive appeared in versions 1.3.1 and 1.2.2.

负载均衡,会选择活动连接数最少的那个。

Syntax:	random [two [method]];
Default: —
Context: upstream

This directive appeared in version 1.15.1.

负载均衡,选择很少被选择的那个服务器。


内置变量

$upstream_addr  地址和端口,或者是 unix domain地址。多个地址用逗号隔开。

$upstream_bytes_received  从上游服务器收到的字节数,多个用逗号隔开。

$upstream_cache_status  访问响应缓存的状态 可以为 MISS BYPASS EXPIRED STALE UPDATING REVALIDATED。

$upstream_connect_time  建立连接的时间,格式为 s.ms 。

$upstream_cookie_name 响应头里的 Set-Cookie 值。

$upstream_header_time  接收响应头花费的时间。

$upstream_http_name  响应头的值,比如 "Server" 头即为 $upstream_http_server。

$upstream_response_length  服务器响应的大小,多个用逗号隔开。

$upstream_response_time  获取响应花费的时间。

$upstream_status 响应状态码。

$upstream_trailer_name  响应结尾的值。


 备注

1.测试环境centos7 64位,nginx版本为 1.14.0。
2.读者也可以参考官方文档 nginx documentation
3..原文地址http://www.freecls.com/a/2712/c8


©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。