nginx負載均衡

土豆泥呀發表於2024-03-13

nginx負載均衡

使用客戶端的真實ip進行hash

  • 在經過多層代理後,ip_hash獲取到的是伺服器的ip,客戶端真實ip需要從$http_x_forwarded_for獲取;

  • 在http模組下增加map模組,返回客戶端ip,在upstream模組中使用map的第二個引數進行hash;

    http {
        #引數對映(根據第一個屬性的值,從下方列表中匹配值,返回到第二個屬性)
        map $http_x_forwarded_for $client_real_ip {
            # 獲取第一個ip
            ~^(?P<first_addr>[0-9\.]+),?.*$ $first_addr;
            # 如果http_x_forwarded_for為空則使用remote_addr伺服器ip
            "" $remote_addr;
        }
    
        # 負載均衡服務池
        upstream practiceBoot {
            hash $client_real_ip;
            server 192.168.1.100:8080; # 後端伺服器1
            server 192.168.1.101:8080; # 後端伺服器2
        }
    
        server {
            listen 80;
    
            # 使用上游伺服器組進行負載均衡
            location /practice{
                proxy_pass http://practiceBoot/practice;# 將請求代理到上游伺服器組
                # 可以新增其他代理相關的配置,如代理超時、緩衝區大小等
            }
        }
    }
    

輪詢

  • 輪詢是預設負載均衡模式,每個請求按照順序分配給後端伺服器,保證每個伺服器平等負載。

     http {
         # 定義上游伺服器組
         upstream practiceBoot {
             server 192.168.1.100:8080; # 後端伺服器1
             server 192.168.1.101:8080; # 後端伺服器2
             # 可以繼續新增更多的後端伺服器
         }
     
         server {
             listen 80;
     
             # 使用上游伺服器組進行負載均衡
             location /practice {
                 proxy_pass http://practiceBoot/practice; # 將請求代理到上游伺服器組
                 # 可以新增其他代理相關的配置,如代理超時、緩衝區大小等
             }
         }
     }
    

IP Hash

  • 透過對客戶端IP地址計算出一個Hash值,再將該值與後端伺服器列表進行匹配,實現同一客戶端訪問同一伺服器的功能。

     http {
         # 定義上游伺服器組
         upstream practiceBoot {
            ip_hash;
             server 192.168.1.100:8080; # 後端伺服器1
             server 192.168.1.101:8080; # 後端伺服器2
             # 可以繼續新增更多的後端伺服器
         }
     
         server {
             listen 80;
     
             # 使用上游伺服器組進行負載均衡
             location /practice {
                 proxy_pass http://practiceBoot/practice; # 將請求代理到上游伺服器組
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                 # 其他代理設定...
             }
         }
     }
    

最少連線

  • 將請求傳送到當前連線數最少的伺服器,以實現最均衡的負載均衡。

    http {
         # 定義上游伺服器組
         upstream practiceBoot {
            least_conn; # 使用最少連線策略
             server 192.168.1.100:8080; # 後端伺服器1
             server 192.168.1.101:8080; # 後端伺服器2
             # 可以繼續新增更多的後端伺服器
         }
     
         server {
             listen 80;
     
             # 使用上游伺服器組進行負載均衡
             location /practice {
                 proxy_pass http://practiceBoot/practice; # 將請求代理到上游伺服器組
                 # 可以新增其他代理相關的配置,如代理超時、緩衝區大小等
             }
         }
     }
    

基於請求URI的負載均衡

  • 可以透過反向代理設定規則,根據請求URI的不同將請求分配到相應的伺服器上。

    http {
         # 定義上游伺服器組
         upstream practiceBoot {
            hash $uri;
             server 192.168.1.100:8080; # 後端伺服器1
             server 192.168.1.101:8080; # 後端伺服器2
             # 可以繼續新增更多的後端伺服器
         }
     
         server {
             listen 80;
     
             # 使用上游伺服器組進行負載均衡
             location /practice {
                 proxy_pass http://practiceBoot/practice; # 將請求代理到上游伺服器組
                 # 可以新增其他代理相關的配置,如代理超時、緩衝區大小等
             }
         }
     }
    

相關文章