HTTP 负载均衡2024 年 8 月 29 日 | 5 分钟阅读 将 HTTP 流量代理到服务器组在使用 Nginx 开源版或 Nginx Plus 对 HTTP 流量进行负载均衡到一组服务器之前,首先我们需要使用 `upstream` 指令定义该组。 该指令放置在 `http` 上下文中。 组中的服务器使用 `server` 指令进行配置。 让我们看一个例子,以下配置定义了一个名为 `backend` 的组,该组由三个服务器配置组成,这些配置可能解析为多于三个实际服务器。 要将请求传递到服务器组,请在 **proxy_pass** 指令中指定组名。 在下面的示例中,在 Nginx 上运行的虚拟服务器将所有请求传递到上游 `backend` 组。 以下示例结合了上面的两个代码片段,并展示了如何将 HTTP 请求代理到 **backend** 服务器组。 该组由三个服务器组成,其中两个是同一应用程序的实例,而第三个是备份服务器。 因为在上游块中没有指定负载均衡算法,所以 Nginx 使用默认算法,即轮询。 选择负载均衡方法Nginx 开源版支持四种负载均衡方法,而 Nginx Plus 添加了另外两种方法 **1. 轮询:** 在此方法中,请求在服务器之间平均分配,并考虑服务器权重。 没有用于启用它的指令; 默认情况下使用此方法。 **2. 最少连接:** 请求发送到具有最少活动连接数的服务器,并考虑服务器权重。 **3. IP 哈希:** 此方法用于确定应为下一个请求选择哪个服务器。 在这种情况下,IPv4 地址的前三个八位字节或整个 IPv6 地址用于计算哈希值。 如果需要临时从负载均衡轮换中删除某个服务器,可以添加 `down` 参数以保留当前客户端 IP 地址的哈希。 **4. 通用哈希:** 将请求发送到的服务器由用户定义的键确定,该键可以是字符串、文本、变量或它们的组合。 例如,该键可以是配对的源 IP 地址和端口,或者键可以是 URI,如以下示例 Nginx Plus 支持另外两种方法 **5. 最短时间:** 对于每个请求,Nginx 选择具有最低平均延迟和最少活动连接数的服务器,其中最低平均延迟基于包含在 `least_time` 指令中的以下哪个参数进行计算。
**6. 随机:** 在此方法中,每个请求将传递到随机选择的服务器。 如果指定了 2 个参数,则首先 nginx 随机选择两个服务器,同时考虑服务器权重,然后使用指定的方法选择其中一个服务器
服务器权重默认情况下,Nginx 使用权重通过轮询方法在组中的服务器之间分配请求。 `server` 指令的 `weight` 参数用于设置服务器的**权重**。 默认权重为 1。 在上面的示例中,backend1.example.com 的权重为 5,其他两个服务器的权重为默认权重 1,但是 IP 地址为 192.0.0.1 的服务器被标记为备份服务器,除非其他两个服务器都不可用,否则不会收到请求。 在这种类型的权重配置中,每 6 个请求中,有 5 个发送到 **backend1.example.com**,1 个发送到 **backend2.example.com**。 服务器慢启动服务器慢启动用于防止最近恢复的服务器被连接淹没,这些连接可能会超时并导致服务器再次被标记为失败。 在 Nginx Plus 中,慢启动允许上游服务器在恢复或可用后,将其权重从 0 逐渐恢复到其标称值。 为此,请使用 `server` 指令的 `slow_start` 参数。 启用会话持久性Nginx Plus 识别用户会话并将给定会话中的所有请求路由到同一上游服务器。 这称为会话持久性。 Nginx Plus 使用三种会话持久性方法。 这些方法使用 **sticky** 指令设置。 Sticky Cookie Nginx Plus 在来自上游组的第一个响应中包含一个会话 cookie,并标识发送该响应的服务器。 客户端的下一个请求包含 cookie 值,Nginx Plus 将请求路由到响应第一个请求的上游服务器。 在上面的示例中,`srv_id` 参数用于设置 cookie 的名称。 `expires` 参数是可选的,它设置浏览器保留 cookie 的时间。 `a domain` 也是一个可选参数,它定义了为其设置 cookie 的域。 `the path` 也是一个可选参数。 它定义了设置 cookie 的路径。 Sticky Cookie 是最简单的会话持久性方法。 Sticky Route当 Nginx Plus 收到第一个请求时,它会为客户端分配一个路由。 所有后续请求都与 `server` 指令的 `route` 参数进行比较,以标识将请求代理到的服务器。 路由的信息取自 cookie 或请求 URI。 Cookie Learn首先,Nginx Plus 通过检查请求和响应来查找会话标识符。 然后,Nginx Plus "学习"哪个上游服务器对应于哪个会话标识符。 通常,这些标识符在 HTTP cookie 中传递。 如果请求已经 "学习" 了一个会话标识符,则 Nginx Plus 会将请求转发到相应的服务器。 在上面的示例中,其中一个上游服务器通过在响应中设置 cookie **EXAMPLECOOKIE** 来创建会话。 下一个主题NGINX 指令 |
我们请求您订阅我们的新闻通讯以获取最新更新。