面試官最愛問:Nginx 怎么實(shí)現(xiàn)負(fù)載均衡?哪幾種策略最常用?
今天分享一個(gè)常見的面試題:“Nginx 是如何做負(fù)載均衡的?常見策略有哪些?有什么區(qū)別?”
別小看這個(gè)問題,它幾乎是大廠面試 運(yùn)維 的必考題。下面就展開詳細(xì)講解一下。

1. 什么是負(fù)載均衡?
一句話概括:把用戶的請求分?jǐn)偟蕉嗯_服務(wù)器上,提高系統(tǒng)并發(fā)能力和穩(wěn)定性。
沒有負(fù)載均衡時(shí):
- 全部流量打到一臺服務(wù)器,可能會“爆掉”;
- 一臺掛了,整個(gè)服務(wù)就宕機(jī)。
有了負(fù)載均衡:
- 請求被智能分配到多臺機(jī)器,性能提升;
- 單機(jī)宕機(jī),其他機(jī)器繼續(xù)扛流量,系統(tǒng)更穩(wěn)。
而 Nginx 就是最常用的 七層(應(yīng)用層)負(fù)載均衡器。
2. Nginx 怎么實(shí)現(xiàn)負(fù)載均衡?
Nginx 的負(fù)載均衡主要通過 upstream 模塊 實(shí)現(xiàn),需要配合proxy_pass使用,。
核心配置長這樣:
http {
upstream backend {
server 10.0.0.101:8089;
server 10.0.0.102:8089;
server 10.0.0.103:8089;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}上面配置的意思是:
- 定義了一個(gè) backend 集群,包含三臺服務(wù)器;
- 用戶請求訪問 80 端口時(shí),Nginx 會按照一定策略分配到這幾臺機(jī)器上。
3. Nginx 常見負(fù)載均衡策略
Nginx 提供了多種 調(diào)度算法(分配策略),我這里講幾個(gè)常用并且比較重要的。
可以參考官網(wǎng)的:https://nginx.org/en/docs/http/load_balancing.html
(1) 輪詢(默認(rèn))
- 配置:直接寫 server,不加任何參數(shù)。
- 規(guī)則:按照順序一個(gè)一個(gè)分配,平均分流。
- 特點(diǎn):簡單、常用,適合請求壓力差不多的場景。
(2) 加權(quán)輪詢(weight)
配置:
upstream backend {
server 10.0.0.101:8089 weight=3;
server 10.0.0.102:8089 weight=1;
}- 規(guī)則:權(quán)重越高,分到的請求越多。
- 應(yīng)用場景:某些機(jī)器性能更強(qiáng),就給它更高權(quán)重。
(3) IP 哈希(ip_hash)
配置:
upstream backend {
ip_hash;
server 10.0.0.101:8089;
server 10.0.0.102:8089;
}- 規(guī)則:根據(jù)客戶端 IP 計(jì)算 hash,固定分配到某一臺服務(wù)器。
- 優(yōu)點(diǎn):能保持“會話粘性”(用戶 A 每次都打到同一臺機(jī)器)。
- 缺點(diǎn):一臺機(jī)器宕機(jī)后,hash 可能失效,用戶會斷開,清除緩存后會重新分配可用節(jié)點(diǎn)。
(4) 最少連接(least_conn)
配置:
upstream backend {
least_conn;
server 10.0.0.101:8089;
server 10.0.0.102:8089;
}- 規(guī)則:優(yōu)先把請求分給當(dāng)前連接數(shù)最少的機(jī)器。
- 應(yīng)用場景:請求處理耗時(shí)差別較大時(shí)更公平。
(5) 隨機(jī)(Random)
配置:
upstream backend {
random;
server 10.0.0.101:8089;
server 10.0.0.102:8089;
}規(guī)則:隨機(jī)分配。
增強(qiáng)版:
random two least_conn;表示從兩臺隨機(jī)機(jī)器里選連接數(shù)少的。
應(yīng)用場景:避免熱點(diǎn)傾斜,簡單有效。
(6) 哈希(Hash)
配置:
upstream backend {
hash $request_uri consistent;
server 10.0.0.101:8089;
server 10.0.0.102:8089;
}- 規(guī)則:對任意 key(比如 URI、用戶 ID、cookie)做哈希。
- 應(yīng)用場景:一致性 hash,適合分布式緩存。
- 比 ip_hash 更靈活。
(7) fair(第三方模塊)
規(guī)則:根據(jù)響應(yīng)時(shí)間分配,請求優(yōu)先落到響應(yīng)更快的機(jī)器。
說明:不是 Nginx 自帶,需要 upstream_fair 模塊。
(8) 最少時(shí)間(least_time)
- 規(guī)則:選擇平均響應(yīng)時(shí)間最短的機(jī)器,而不僅僅看連接數(shù)。
- 說明:開源版 Nginx 沒有,商業(yè)版 Nginx Plus 提供。
上面是Nginx的分流模式,Nginx還支持“健康檢測”,就是可以通過Keepalived實(shí)現(xiàn)高可用。
- 如果某臺機(jī)器掛了,Nginx 會臨時(shí)摘除它,不再轉(zhuǎn)發(fā)請求;
- 等它恢復(fù)正常,再自動(dòng)加入。
這樣就避免了用戶請求打到壞機(jī)器上。
4. 回答公式
如果面試官問你:“Nginx 怎么做負(fù)載均衡?有哪些策略?”
你可以這么答:
Nginx 通過 `upstream` 模塊實(shí)現(xiàn)負(fù)載均衡。常見策略有:
輪詢(默認(rèn),平均分配請求);
加權(quán)輪詢(根據(jù)服務(wù)器性能分配流量);
least_conn(優(yōu)先分配給連接數(shù)少的機(jī)器);
ip_hash(保證會話粘性);
另外還有 random、hash、fair、least_time 等進(jìn)階策略,能根據(jù)不同業(yè)務(wù)場景優(yōu)化分配效果。
同時(shí) Nginx 還支持通過keepalived健康檢查,能保證高可用。怎樣?面試官看你這樣答后心想:這小子有點(diǎn)東西,穩(wěn)值三千。
































