如何在 Linux 中使用 Nginx 作为 HTTP 负载均衡器
在设置多个应用程序服务器以实现冗余时,负载平衡是一种常用的机制,用于在一组后端服务器之间有效分配传入的服务请求或网络流量。
负载平衡有几个优点,包括通过冗余提高应用程序可用性、提高可靠性和可扩展性(当流量增加时可以添加更多服务器)。它还带来了应用程序性能的提高和许多其他好处。
推荐阅读:保护、强化和提高 Nginx Web 服务器性能的终极指南
Nginx 可以部署为高效的 HTTP 负载均衡器,在一组应用程序服务器之间分配传入的网络流量和工作负载,在每种情况下将响应从所选服务器返回到应用程序服务器。合适的客户。
Nginx支持的负载均衡方式有:
- round-robin – 以循环方式将请求分发到应用程序服务器。当没有指定方法时默认使用它,
- 最少连接 – 将下一个请求分配给不太繁忙的服务器(活动连接数最少的服务器),
- ip-hash – 哈希函数用于根据客户端的 IP 地址确定下一个请求应选择哪个服务器。此方法允许会话持久性(将客户端绑定到特定的应用程序服务器)。
此外,您可以使用服务器权重来影响更高级的 Nginx 负载平衡算法。 Nginx 还支持健康检查,如果服务器的响应因错误而失败,则将服务器标记为失败(在可配置的时间内,默认为 10 秒),从而避免选择该服务器服务器用于后续传入请求一段时间。
本实用指南展示了如何使用 Nginx 作为 HTTP 负载均衡器,在两台服务器之间分发传入的客户端请求,每台服务器都有同一应用程序的实例。
出于测试目的,每个应用程序实例都带有标签(在用户界面上)以指示其运行的服务器。
测试环境搭建
Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8
在每个应用程序服务器上,每个应用程序实例都配置为使用域 howtoingapp.lan
进行访问。假设这是一个完全注册的域,我们将在 DNS 设置中添加以下内容。
A Record @ 192.168.58.7
此记录告诉客户端请求域应定向到何处,在本例中为负载均衡器 (192.168.58.7)。 DNS A
记录仅接受 IPv4 值。或者,客户端计算机上的 /etc/hosts 文件也可用于测试目的,其中包含以下条目。
192.168.58.7 tecmintapp.lan
在 Linux 中设置 Nginx 负载平衡
在设置 Nginx 负载平衡之前,您必须使用您的发行版的默认包管理器在服务器上安装 Nginx,如下所示。
sudo apt install nginx [On Debian/Ubuntu]
sudo yum install nginx [On CentOS/RHEL]
接下来,创建一个名为 /etc/nginx/conf.d/loadbalancer.conf
的服务器块文件(提供您选择的名称)。
sudo vi /etc/nginx/conf.d/loadbalancer.conf
然后将以下配置复制并粘贴到其中。由于未定义负载平衡方法,因此此配置默认为循环。
upstream backend {
server 192.168.58.5;
server 192.168.58.8;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name tecmintapp.lan;
location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://backend;
}
}
在上面的配置中,proxy_pass
指令(应在位置内指定,在本例中为 /
)用于将请求传递到使用word backend,在upstream指令中(用于定义一组服务器)。此外,请求将使用加权循环平衡机制在服务器之间分配。
要采用最少连接机制,请使用以下配置
upstream backend {
least_conn;
server 192.168.58.5;
server 192.168.58.8;
}
要启用 ip_hash 会话持久机制,请使用:
upstream backend {
ip_hash;
server 192.168.58.5;
server 192.168.58.8;
}
您还可以使用服务器权重影响负载平衡决策。使用以下配置,如果有 6 个来自客户端的请求,则应用程序服务器 192.168.58.5 将分配 4 个请求,其中 2 个请求将发送到 192.168.58.8。
upstream backend {
server 192.168.58.5 weight=4;
server 192.168.58.8;
}
保存文件并退出。然后通过运行以下命令确保添加最近的更改后 Nginx 配置结构正确。
sudo nginx -t
如果配置正常,请重新启动并启用 Nginx 服务以应用更改。
sudo systemctl restart nginx
sudo systemctl enable nginx
在 Linux 中测试 Nginx 负载平衡
要测试 Nginx 负载平衡,请打开 Web 浏览器并使用以下地址进行导航。
http://tecmintapp.lan
网站界面加载后,记下已加载的应用程序实例。然后不断刷新页面。在某些时候,应用程序应该从第二个服务器加载,指示负载平衡。
您刚刚学习了如何在 Linux 中将 Nginx 设置为 HTTP 负载均衡器。我们希望通过下面的反馈表了解您对本指南的看法,尤其是关于使用 Nginx 作为负载均衡器的看法。有关更多信息,请参阅有关使用 Nginx 作为 HTTP 负载均衡器的 Nginx 文档。