在設置多個應用程式伺服器以實現冗餘時,負載平衡是一種常用機制,用於有效地將傳入的服務請求或網絡流量分配到一組後端伺服器。
負載平衡具有多項優勢,包括通過冗餘提高應用程式可用性、提高可靠性和可擴展性(當流量增加時可以添加更多伺服器)。它還帶來了改進的應用程式性能和許多其他好處。
推薦閱讀:Nginx Web伺服器安全、加固和提升性能的終極指南
Nginx可以部署為高效的HTTP負載平衡器,以將傳入的網絡流量和工作負載分配給一組應用程式伺服器,在每種情況下,從選定的伺服器返回響應給相應的客戶端。
Nginx支持的負載平衡方法包括:
- 輪詢(round-robin) – 以輪詢方式將請求分配給應用程式伺服器。如果未指定方法,則使用默認方法,
- 最少連接(least-connected) – 將下一個請求分配給較不繁忙的伺服器(具有最少活躍連接數的伺服器)。
- 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
在每个应用服务器上,每个应用实例都配置为使用域名 tecmintapp.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
指令(應在位置內指定,本例中為 /
)用於將請求傳遞給使用單詞 backend 引用的 HTTP 代理伺服器,在 上游指令 中(用於定義一組伺服器)。此外,請求將使用加權輪詢平衡機制在伺服器之間進行分發。
要使用最少連接機制,請使用以下配置
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; }
您還可以使用伺服器 權重 影響負載平衡決策。使用以下配置,如果有六個來自客戶端的請求,應用伺服器 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 負載平衡,打開網頁瀏覽器,使用以下地址導航。
http://tecmintapp.lan
一旦網站介面加載完成,注意已加載的應用實例。然後持續刷新頁面。在某個時刻,應用應該從第二個伺服器加載,表示負載平衡。

您剛剛學會如何在 Linux 中設置 Nginx 作為 HTTP 負載平衡器。我們想知道您對這個指南的看法,特別是關於使用 Nginx 作為負載平衡器,請通過下面的反饋表單告訴我們。有關更多信息,請參閱有關 使用 Nginx 作為 HTTP 負載平衡器 的 Nginx 文檔。
Source:
https://www.tecmint.com/use-nginx-as-http-load-balancer-in-linux/