手把手教你Nginx常用模块详解之ngx_stream_upstream_module(八)

简介: 手把手教你Nginx常用模块详解之ngx_stream_upstream_module(八)

本专栏非常感谢大家得关注和支持,本人开源项目站点https://erosbt.com 将自己热爱与信仰的技术,持续不辍地传递。


Nginx专栏



一. 指令


ngx_stream_upstream_module


二. 语法


句法: 上流名称{…}
默认:
语境:

定义一组服务器。服务器可以侦听不同的端口。另外,侦听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.com和server1.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_fails,fail_timeout并且slow_start参数被忽略,并且这样的服务器永远不会被视为不可用。

句法: 区域名称大小;
默认:
语境: 上游

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


此外,作为我们的商业订阅的一部分,此类组允许更改组成员身份或修改特定服务器的设置,而无需重新启动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变量中的地址。


三. 示例


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

以上更多详解请大家关注nginx官方网站https://nginx.org/en/docs/


    以上就是我们今天的教程,如果本文对你有所帮助,欢迎关注点赞,分享给您身边的朋友。您的鼓励就是对我的最大动力。

相关文章
|
2月前
|
应用服务中间件 nginx
Nginx安装nginx-rtmp-module模块
【2月更文挑战第4天】 nginx中的模块虽然就是类似插件的概念,但是它无法像VsCode那样轻松的安装扩展。 nginx要安装其它模块必须同时拿到nginx源代码和模块源代码,然后手动编译,将模块打到nginx中,最终生成一个名为nginx的可执行文件。
89 6
|
4月前
|
应用服务中间件 nginx
百度搜索:蓝易云【利用nginx内置ngx_http_mirror_module模块实现流量复制及流量放大】
以上就是使用Nginx内置 `ngx_http_mirror_module`模块实现流量复制和流量放大的简要示例。通过合理配置和利用该模块,可以实现更复杂的流量控制和调试需求。
63 1
|
8月前
浅谈基于openresty(nginx+lua)开发轻量级,按流量控制的灰度模块(下)
浅谈基于openresty(nginx+lua)开发轻量级,按流量控制的灰度模块
87 0
|
7天前
|
Ubuntu 应用服务中间件 nginx
ubuntu编译安装nginx及安装nginx_upstream_check_module模块
以上是编译安装Nginx和安装 `nginx_upstream_check_module`模块的基本步骤。根据你的需求和环境,你可能需要进一步配置Nginx以满足特定的要求。
19 3
|
2月前
|
应用服务中间件 Linux PHP
Linux下安装php环境并且配置Nginx支持php-fpm模块
Linux下安装php环境并且配置Nginx支持php-fpm模块
34 0
|
3月前
|
消息中间件 关系型数据库 MySQL
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
81 0
|
4月前
|
存储 应用服务中间件 nginx
Nginx模块开发:handler模块实现
Nginx模块开发:handler模块实现
30 0
|
4月前
|
存储 应用服务中间件 nginx
Nginx模块开发:模块结构的源码阅读以及过滤器(Filter)模块的实现
Nginx模块开发:模块结构的源码阅读以及过滤器(Filter)模块的实现
72 0
|
4月前
|
存储 应用服务中间件 nginx
Nginx:过滤模块的实现
Nginx:过滤模块的实现
|
4月前
|
存储 负载均衡 网络协议
Nginx: handler 模块的实现
Nginx: handler 模块的实现