博客 | NGINX

使用 NGINX 和 NGINX Plus 进行负载平衡,第 1 部分

NGINX-F5-horiz-black-type-RGB 的一部分
欧文·加勒特缩略图
欧文·加勒特
2014 年 2 月 20 日发布

NGINX 是一种功能强大的加速代理,适用于各种基于 HTTP 的应用。 它的缓存、HTTP 连接处理和卸载显著提高了应用的性能,尤其是在高负载期间。

编辑器 – NGINX Plus Release 5及更高版本还可以对基于TCP的应用进行负载均衡。 在第 6 版中,通过增加健康检查、动态重新配置、SSL 终止等功能,TCP 负载均衡得到了显著扩展。 在 NGINX Plus Release 7<.htmla> 及更高版本中,TCP 负载均衡器具有与 HTTP 负载均衡器完全相同的功能。 支持 UDP 负载均衡 在第 9 版中引入。

您可以在上下文而不是http上下文中配置 TCP 和 UDP 负载均衡。 由于 HTTP 和 TCP/UDP 之间固有的差异,可用的指令和参数略有不同;有关详细信息,请参阅HTTPTCP上游模块的文档。

NGINX Plus通过添加进一步的负载平衡功能扩展了 NGINX 的功能:健康检查会话持久性实时活动监控负载平衡服务器组的动态配置

这篇博文将引导您配置 NGINX,以便将流量负载平衡到一组 Web 服务器。 它重点介绍了 NGINX Plus 中的一些附加功能。

要进一步阅读,您还可以查看NGINX Plus 管理指南以及本文的后续文章《使用 NGINX 和 NGINX Plus 进行负载平衡,第 2 部分》

使用 NGINX 代理流量

我们将首先将流量代理到一对上游 Web 服务器。 以下 NGINX 配置足以终止对端口 80 的所有 HTTP 请求,并以循环方式将它们转发到上游组中的 Web 服务器:

http { 服务器 {
listen 80;

location / {
proxy_pass http://backend;
}
}

上游后端 {
服务器 web-server1:80;
服务器 web-server2:80;
}
}

通过这个简单的配置,NGINX 会在端口 80 上收到的每个请求依次转发到web-server1web-server2 ,在每种情况下都建立一个新的 HTTP 连接。

设置负载平衡方法

默认情况下,NGINX 使用循环方法在服务器之间均匀分布流量,并通过分配给每个服务器的可选“权重”来指示其相对容量。

IP Hash方法根据源 IP 地址的哈希值来分配流量。 来自同一客户端 IP 地址的请求总是被发送到同一个上游服务器。 这是一种粗糙的会话持久方法,每当服务器发生故障或恢复时,或者每当上游组被修改时,就会重新计算;如果需要会话持久,NGINX Plus 可以提供更好的解决方案。

最少连接方法将每个请求路由到具有最少活动连接的上游服务器。 在处理快速和复杂请求时,此方法非常有效。

所有负载平衡方法都可以使用服务器指令上的可选权参数进行调整。 当服务器具有不同的处理能力时,这是有意义的。 在以下示例中,NGINX 定向到web-server2 的请求数量是定向到web-server1 的请求数量的四倍:

上游后端 { 区域后端 64k;least_conn;服务器 web-server1 权重=1;服务器 web-server2权重=4 ;}

在 NGINX 中,权重由每个工作进程独立管理。 NGINX Plus 使用共享内存段来存储上游数据(使用zone指令进行配置),因此权重在各个工作者之间共享,并且流量分配更加准确。

故障检测

如果 NGINX 尝试连接服务器、向其传递请求或读取响应标头时出现错误或超时,NGINX 将与另一台服务器重试连接请求。 (您可以在配置中包含proxy_next_upstream指令来定义重试请求的其他条件。) 此外,NGINX 可以将故障服务器从潜在服务器集合中剔除,并偶尔尝试对其发出请求以检测其何时恢复。 服务器指令的max_failsfail_timeout参数控制此行为。

NGINX Plus 添加了一组带外健康检查,对每个上游服务器执行复杂的 HTTP 测试以确定它是否处于活动状态,并添加了慢启动机制以逐步将恢复的服务器重新引入负载均衡组:

服务器web-server1 slow_start=30s;

常见的“陷阱”——修复主机

通常,上游服务器使用请求中的Host标头来确定提供哪些内容。 如果你遇到意外情况404服务器错误,或任何其他表明它提供错误内容的迹象,这是首先要检查的事情。 然后在配置中包含proxy_set_header指令来为标题设置适当的值:

location / { proxy_pass http://backend; # 将“Host”标头重写为客户端请求中的值 # 或主服务器名称proxy_set_header Host $host ; # 或者,将值放在配置中:#proxy_set_header Host www.example.com; }

使用 NGINX Plus 进行高级负载平衡

NGINX Plus 中的一系列高级功能使其成为上游服务器场前方的理想负载均衡器

有关高级负载均衡和代理的详细信息,请参阅本文的后续文章使用 NGINX 和 NGINX Plus 进行负载均衡,第 2 部分

要试用 NGINX Plus,请立即开始30 天免费试用,或联系我们讨论您的负载平衡用例


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”