Nginx反向代理與負載均衡入門

爲什麼需要反向代理和負載均衡?

想象你開了一家小餐廳,剛開始只有一個廚師,客人多了就會排隊。這時候,你可能需要僱更多廚師(增加服務器),但客人直接找廚師會很混亂,所以你需要一個前臺(反向代理服務器)來接待客人,再把客人的訂單(請求)分配給不同的廚師(後端服務器)。這就是反向代理和負載均衡的核心作用:隱藏後端服務器,同時讓多臺服務器分擔請求壓力

一、反向代理是什麼?

反向代理(Reverse Proxy)就像一個“前臺接待員”,它接收用戶的請求,然後將請求轉發給後端的服務器處理,最後把處理結果返回給用戶。用戶只需要和“前臺”打交道,不需要知道後端有多少廚師(服務器)。

舉個例子
用戶訪問 https://example.com,實際上是Nginx(前臺)接收到請求,然後轉發給後端的Web服務器(比如192.168.1.101),用戶最終看到的頁面是後端服務器返回的,但用戶不知道後端具體是誰。

二、負載均衡是什麼?

當用戶越來越多,單個後端服務器可能扛不住壓力(比如CPU、內存滿了),這時候就需要“多廚師(多服務器)”一起工作。負載均衡就是讓“前臺”(Nginx)把用戶的請求平均分配給不同的後端服務器,避免某一臺服務器過載。

Nginx如何實現負載均衡?
Nginx通過 upstream 模塊定義後端服務器組,然後將用戶請求“轉發”到這個服務器組中。默認情況下,Nginx會按“輪詢”方式(輪流分配)把請求發給後端服務器。

三、手把手配置Nginx反向代理+負載均衡

假設你已經安裝了Nginx(如果沒安裝,Ubuntu/Debian可以用 sudo apt install nginx,CentOS用 sudo yum install nginx)。現在我們來配置一個簡單的負載均衡環境。

步驟1:定義後端服務器組

假設你的後端有兩臺Web服務器,IP分別是 192.168.1.101192.168.1.102(你需要確保這兩臺服務器已啓動並能正常訪問)。

打開Nginx配置文件(通常在 /etc/nginx/conf.d/default.conf/etc/nginx/nginx.conf),添加以下內容:

# 定義後端服務器組,名稱爲 backend_servers
upstream backend_servers {
    server 192.168.1.101;  # 後端服務器1
    server 192.168.1.102;  # 後端服務器2
}

步驟2:配置反向代理規則

在同一個配置文件中,添加Nginx的反向代理規則,讓用戶請求通過Nginx轉發到剛纔定義的後端服務器組:

server {
    listen 80;          # Nginx監聽的端口(用戶訪問的端口)
    server_name example.com;  # 你的域名或服務器IP

    location / {         # 匹配所有請求
        proxy_pass http://backend_servers;  # 轉發到後端服務器組
        proxy_set_header Host $host;        # 傳遞請求頭信息(後端服務器能獲取用戶真實域名)
        proxy_set_header X-Real-IP $remote_addr;  # 傳遞用戶真實IP(後端服務器能看到用戶真實IP)
    }
}

步驟3:測試配置

  1. 檢查配置語法
    執行 sudo nginx -t,確保沒有語法錯誤。如果輸出 syntax is oktest is successful,說明配置沒問題。

  2. 重啓Nginx
    執行 sudo systemctl restart nginx 使配置生效。

  3. 測試負載均衡
    用瀏覽器訪問Nginx服務器的IP(比如 http://192.168.1.100,假設Nginx裝在這臺服務器上),你會發現請求會被輪流分配給 192.168.1.101192.168.1.102 處理。

四、進階:調整負載均衡策略

Nginx默認使用“輪詢”策略(每個請求輪流分配),但你可以根據需求調整分配規則:

1. 加權輪詢(按權重分配請求)

如果後端服務器性能不同(比如一臺服務器更強),可以給它分配更多請求:

upstream backend_servers {
    server 192.168.1.101 weight=5;  # 權重5(50%概率)
    server 192.168.1.102 weight=3;  # 權重3(30%概率)
}

2. IP哈希(固定用戶請求到同一服務器)

如果用戶需要保持會話一致性(比如購物車數據),可以按用戶IP分配:

upstream backend_servers {
    ip_hash;  # 按IP哈希分配,同一個用戶始終訪問同一臺後端服務器
    server 192.168.1.101;
    server 192.168.1.102;
}

五、總結

  • 反向代理:隱藏後端服務器,統一用戶入口,安全且便於管理。
  • 負載均衡:通過多服務器分擔壓力,避免單點故障,提升系統穩定性。
  • Nginx配置核心:用 upstream 定義後端服務器組,用 proxy_pass 轉發請求。

對於初學者,先掌握輪詢策略和基本配置即可。隨着需求深入,還可以學習更復雜的策略(如健康檢查、URL哈希等),但核心思想始終是“合理分配請求,讓服務器不卡頓”。

現在,你可以嘗試在自己的Linux服務器上配置一個簡單的負載均衡環境了!

小夜