非常教程

Nginx参考手册

ngx_stream_upstream_module

ngx_stream_upstream_module

  • 示例配置
  • 指令
  • upstream
  • 服务器
  • 哈希
  • least_conn
  • least_time
  • 嵌入式变量

所述ngx_stream_upstream_module模块(1.9.0)被用于定义可以由proxy_pass指令中引用的服务器组。

示例配置

upstream backend {
    hash $remote_addr consistent;

    server backend1.example.com:12345  weight=5;
    server backend2.example.com:12345;
    server unix:/tmp/backend3;

    server backup1.example.com:12345   backup;
    server backup2.example.com:12345   backup;
}

server {
    listen 12346;
    proxy_pass backend;
}

具有定期健康检查的动态可配置组可作为我们商业订阅的一部分:

resolver 10.0.0.1;

upstream dynamic {
    zone upstream_dynamic 64k;

    server backend1.example.com:12345 weight=5;
    server backend2.example.com:12345 fail_timeout=5s slow_start=30s;
    server 192.0.2.1:12345            max_fails=3;
    server backend3.example.com:12345 resolve;
    server backend4.example.com       service=http resolve;

    server backup1.example.com:12345  backup;
    server backup2.example.com:12345  backup;
}

server {
    listen 12346;
    proxy_pass dynamic;
    health_check;
}

指令

句法:

上流名称{...}

默认:

语境:

定义一组服务器。服务器可以侦听不同的端口。另外,侦听TCP和UNIX域套接字的服务器可以混合使用。

例:

upstream backend {
    server backend1.example.com:12345 weight=5;
    server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend2;
    server backend3.example.com:12345 resolve;

    server backup1.example.com:12345  backup;
}

默认情况下,使用加权循环平衡方法在服务器之间分配连接。在上面的例子中,每7个连接将分配如下:连接5个连接backend1.example.com:12345并且连接到第二和第三服务器。如果在与服务器通信期间发生错误,则连接将被传递到下一个服务器,等等,直到所有正在运行的服务器都将被尝试。如果与所有服务器通信失败,连接将被关闭。

句法:

服务器地址参数;

默认:

语境:

upstream

定义服务器address和其他parameters服务器。该地址可以指定为具有强制端口的域名或IP地址,或指定为“ unix:”前缀后面指定的UNIX域套接字路径。解析为多个IP地址的域名一次定义多个服务器。

以下参数可以定义:

weight= number设置服务器的权重,缺省max_conns值为1. = number限制number同时连接到代理服务器的最大数量(1.11.5)。默认值为零,这意味着没有限制。如果服务器组不驻留在共享内存中,则每个工作进程都有限制。

在版本1.11.5之前,此参数作为我们商业订阅的一部分提供。

max_fails= number设置在fail_timeout参数设置的持续时间内应该发生的与服务器通信失败的次数,以便在参数设置的持续时间内将服务器视为不可用fail_timeout。默认情况下,不成功尝试的次数设置为1.零值将禁用尝试的计费。在这里,尝试失败是在与服务器建立连接时发生错误或超时。fail_timeout= time集合

  • 指定数量的尝试与服务器通信失败的时间应该发生在考虑服务器不可用的时间内;
  • 以及服务器将被视为不可用的时间段。

默认情况下,该参数设置为10秒。backup将服务器标记为备份服务器。主服务器不可用时,将连接到备份服务器。down将服务器标记为永久不可用。

此外,以下参数可作为我们商业订阅的一部分:

resolve监视与服务器的域名对应的IP地址的变化,并自动修改上游配置而不需要重新启动nginx。服务器组必须驻留在共享内存中。

为了使此参数起作用,必须在流程块中指定解析器指令。例:

stream {
    resolver 10.0.0.1;

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

service= name启用解析DNS SRV记录并设置服务name(1.9.13)。为了使此参数起作用,有必要指定服务器的解析参数并指定一个不带端口号的主机名。

如果服务名称不包含点(“ .”),则会构造符合RFC的名称,并将TCP协议添加到服务前缀中。例如,要查找_http._tcp.backend.example.comSRV记录,有必要指定指令:

server backend.example.com service=http resolve;

如果服务名称包含一个或多个点,则通过加入服务前缀和服务器名称来构造名称。例如,要查找_http._tcp.backend.example.comserver1.backend.example.comSRV记录,有必要指定指令:

server backend.example.com service=_http._tcp resolve;
server example.com service=server1.backend resolve;

最高优先级的SRV记录(具有相同的最低优先级值的记录)被解析为主服务器,其余的SRV记录被解析为备份服务器。如果为服务器指定了备份参数,则将高优先级SRV记录解析为备份服务器,其余SRV记录将被忽略。

slow_start= time设置time服务器将其重量从零恢复到正常值的时间,当不健康的服务器变得健康时,或者服务器在一段时间后变得可用时认为不可用。默认值为零,即慢启动被禁用。

该参数不能与散列负载平衡方法一起使用。如果组中只有一台服务器max_failsfail_timeout并且slow_start参数被忽略,并且这样的服务器永远不会被视为不可用。

句法:

区域名称大小;

默认:

语境:

上游

定义namesize其保持组的配置和运行时被工作者进程之间共享状态中的共享存储器区。几个小组可能共享相同的区域。在这种情况下,仅指定一次区域大小就足够了。

此外,作为我们的商业订阅的一部分,此类组允许更改组成员身份或修改特定服务器的设置,而无需重新启动nginx。配置可以通过upstream_conf处理的特殊位置访问。

句法:

状态文件;

默认:

语境:

upstream

指定file保持动态可配置组的状态。

例子:

state /var/lib/nginx/state/servers.conf; # path for Linux
state /var/db/nginx/state/servers.conf;  # path for FreeBSD

目前状态仅限于具有参数的服务器列表。解析配置时会读取该文件,并且每次上游配置更改时都会更新。应该避免直接更改文件内容。该指令不能与服务器指令一起使用。

配置重新加载或二进制升级期间所做的更改可能会丢失。该指令可作为我们商业订阅的一部分。

句法:

散列键一致;

默认:

语境:

upstream

指定客户端 - 服务器映射基于散列key值的服务器组的负载平衡方法。该key可以包含文本,变量,以及它们的组合(1.11.2)。用法示例:

hash $remote_addr;

请注意,从组中添加或删除服务器可能导致将大多数密钥重新映射到不同的服务器。该方法与Cache :: Memcached Perl库兼容。

如果consistent指定了参数,则将使用ketama一致性哈希方法。该方法可确保在向组中添加或删除服务器时,只有少数密钥将重新映射到不同的服务器。这有助于为高速缓存服务器实现更高的高速缓存命中率。该方法与参数设置为160 的Cache :: Memcached :: Fast Perl库兼容ketama_points

句法:

least_conn;

默认:

语境:

上游

指定服务器组应使用负载平衡方法,其中考虑到服务器权重,将连接传递给活动连接数最少的服务器。如果有多个这样的服务器,则依次使用加权循环平衡方法尝试它们。

句法:

least_time connect | first_byte | last_byte机上;

默认:

语境:

上游

指定组应该使用负载平衡方法,其中考虑到服务器的权重,将连接传递给平均时间最少且活动连接数最少的服务器。如果有多个这样的服务器,则依次使用加权循环平衡方法尝试它们。

如果connect指定了参数,则使用连接到上游服务器的时间。如果first_byte指定了参数,则使用接收数据第一个字节的时间。如果last_byte指定,则使用接收数据的最后一个字节的时间。如果inflight参数被指定(1.11.6),则不完整的连接也被考虑在内。

在版本1.11.6之前,默认情况下会考虑不完整的连接。该指令可作为我们商业订阅的一部分。

嵌入式变量

ngx_stream_upstream_module模块支持以下嵌入式变量:

$upstream_addr保留IP地址和端口,或上游服务器(1.11.4)的UNIX域套接字的路径。如果在代理期间联系了几台服务器,则其地址用逗号分隔,例如“ 192.168.1.1:12345, 192.168.1.2:12345, unix:/tmp/sock”。如果无法选择服务器,则该变量将保留服务器组的名称。$upstream_bytes_sent发送到上游服务器的字节数(1.11.4)。来自多个连接的值由逗号分隔,如$ upstream_addr变量中的地址。$upstream_bytes_received从上游服务器收到的字节数(1.11.4)。来自多个连接的值由逗号分隔,如$ upstream_addr变量中的地址。$upstream_connect_time时间连接到上游服务器(1.11.4); 时间以毫秒分辨率保持在几秒钟内。几个连接的时间用逗号分隔,如$ upstream_addr变量中的地址。$upstream_first_byte_time接收第一个数据字节的时间(1.11.4); 时间以毫秒分辨率保持在几秒钟内。几个连接的时间用逗号分隔,如$ upstream_addr变量中的地址。$upstream_session_time会话持续时间以秒为单位,毫秒分辨率(1.11.4)。几个连接的时间用逗号分隔,如$ upstream_addr变量中的地址。

ngx_stream_upstream_module
Nginx

Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件代理服务器,可在 BSD-like 协议下发行。其特点是占有内存少,并发能力强。

主页 https://nginx.org/
源码 http://hg.nginx.org/nginx
发布版本 1.13.6

Nginx目录

1.指南 | Guides
2.核心 | Core
3.ngx_google_perftools_module
4.ngx_http_access_module
5.ngx_http_addition_module
6.ngx_http_api_module
7.ngx_http_auth_basic_module
8.ngx_http_auth_jwt_module
9.ngx_http_auth_request_module
10.ngx_http_autoindex_module
11.ngx_http_browser_module
12.ngx_http_charset_module
13.ngx_http_core_module
14.ngx_http_dav_module
15.ngx_http_empty_gif_module
16.ngx_http_f4f_module
17.ngx_http_fastcgi_module
18.ngx_http_flv_module
19.ngx_http_geoip_module
20.ngx_http_geo_module
21.ngx_http_gunzip_module
22.ngx_http_gzip_module
23.ngx_http_gzip_static_module
24.ngx_http_headers_module
25.ngx_http_hls_module
26.ngx_http_image_filter_module
27.ngx_http_index_module
28.ngx_http_js_module
29.ngx_http_keyval_module
30.ngx_http_limit_conn_module
31.ngx_http_limit_req_module
32.ngx_http_log_module
33.ngx_http_map_module
34.ngx_http_memcached_module
35.ngx_http_mirror_module
36.ngx_http_mp4_module
37.ngx_http_perl_module
38.ngx_http_proxy_module
39.ngx_http_random_index_module
40.ngx_http_realip_module
41.ngx_http_referer_module
42.ngx_http_rewrite_module
43.ngx_http_scgi_module
44.ngx_http_secure_link_module
45.ngx_http_session_log_module
46.ngx_http_slice_module
47.ngx_http_spdy_module
48.ngx_http_split_clients_module
49.ngx_http_ssi_module
50.ngx_http_ssl_module
51.ngx_http_status_module
52.ngx_http_stub_status_module
53.ngx_http_sub_module
54.ngx_http_upstream_conf_module
55.ngx_http_upstream_hc_module
56.ngx_http_upstream_module
57.ngx_http_userid_module
58.ngx_http_uwsgi_module
59.ngx_http_v2_module
60.ngx_http_xslt_module
61.ngx_mail_auth_http_module
62.ngx_mail_core_module
63.ngx_mail_imap_module
64.ngx_mail_pop3_module
65.ngx_mail_proxy_module
66.ngx_mail_smtp_module
67.ngx_mail_ssl_module
68.ngx_stream_access_module
69.ngx_stream_core_module
70.ngx_stream_geoip_module
71.ngx_stream_geo_module
72.ngx_stream_js_module
73.ngx_stream_limit_conn_module
74.ngx_stream_log_module
75.ngx_stream_map_module
76.ngx_stream_proxy_module
77.ngx_stream_realip_module
78.ngx_stream_return_module
79.ngx_stream_split_clients_module
80.ngx_stream_ssl_module
81.ngx_stream_ssl_preread_module
82.ngx_stream_upstream_hc_module
83.ngx_stream_upstream_module