如何在Linux中使用Nginx作为HTTP负载均衡器

在設置多個應用程式伺服器以實現冗餘時,負載平衡是一種常用機制,用於有效地將傳入的服務請求或網絡流量分配到一組後端伺服器。

負載平衡具有多項優勢,包括通過冗餘提高應用程式可用性、提高可靠性和可擴展性(當流量增加時可以添加更多伺服器)。它還帶來了改進的應用程式性能和許多其他好處。

推薦閱讀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

一旦網站介面加載完成,注意已加載的應用實例。然後持續刷新頁面。在某個時刻,應用應該從第二個伺服器加載,表示負載平衡。

Check Nginx Load Balancing in Linux

您剛剛學會如何在 Linux 中設置 Nginx 作為 HTTP 負載平衡器。我們想知道您對這個指南的看法,特別是關於使用 Nginx 作為負載平衡器,請通過下面的反饋表單告訴我們。有關更多信息,請參閱有關 使用 Nginx 作為 HTTP 負載平衡器 的 Nginx 文檔。

Source:
https://www.tecmint.com/use-nginx-as-http-load-balancer-in-linux/