在 Linux 伺服器上安裝負載平衡器選擇一個軟體負載平衡器(HAProxy 或 Nginx),透過發行版的軟體包進行安裝 manager,配置前端和後端池,並進行健康檢查, SSL開啟防火牆連接埠 80/443,然後測試故障轉移。為了實現高可用性,請新增第二個節點並使用 Keepalived 指派虛擬 IP 位址。
在本逐步指南中,您將學習如何使用 HAProxy 在 Linux 伺服器上安裝負載平衡器。 Nginx配置健康檢查和 SSL 終止服務、使用 Keepalived 部署高可用性、強化安全性、監控效能並避免常見陷阱。這些說明既適合初學者,又技術嚴謹,基於真實的託管經驗。
什麼是負載平衡器(以及它為何重要)?

負載平衡器將傳入流量分配到多個應用伺服器上,以提高可靠性、速度和可擴充性。在 Linux 系統上,流行的開源選擇包括 HAProxy(高效能 L4/L7 代理)和 Nginx (Web 伺服器和 L7 反向代理)。您可以負載平衡 HTTP/HTTPS(第 7 層)或原始 TCP(第 4 層),新增健康檢查、會話持久性等功能。 SSL 解除安裝.
本指南適用於哪些人群
本指南是針對希望在 Web 應用、API、WordPress 或微服務前端設定 Linux 負載平衡器的開發人員、系統管理員和網站所有者。本指南假定讀者俱備基本的 Linux 命令列知識和 sudo 權限。
Linux 上的負載平衡選項
選擇合適的工具取決於您的流量狀況、功能和營運偏好。
- HAProxy(推薦): 卓越的效能、豐富的健康檢查、黏性、進階路由、TLS、可觀測性。
- Nginx (開源): 非常適合用作反向代理/L7負載平衡器,配置簡單,生態系統強大;開箱即用,具備被動健康檢查功能。
- IPVS/LVS(透過 keepalived): 核心級第 4 層負載平衡,實現極高的吞吐量;L7 層功能較少。
對於大多數 Web 工作負載,可以從 HAProxy 開始。 Nginx如果您需要數百萬個並發連接,同時保持最小的開銷和簡單的 L4 邏輯,請考慮 LVS/IPVS。
條件:
- Linux 伺服器: Ubuntu 22.04/24.04 或 RHEL/AlmaLinux/Rocky 8/9。
- 具備root/sudo權限和基本網路知識。
- 至少需要兩台後端應用伺服器來平衡流量。
- DNS 記錄指向負載平衡器的公共 IP 位址(或 HA 設定中的浮動/虛擬 IP 位址)。
- 防火牆存取權限,開放連接埠 80/443(以及用於統計資訊的 8404/9000,可選)。
快速決策:HAProxy 與 Nginx
- 如果您需要進階健康檢查、詳細指標、黏滯表或繁重任務,請選擇 HAProxy。 SSL/TLS卸載。
- 挑 Nginx 如果您喜歡熟悉的 Web 伺服器 + 代理堆疊,或者您已經將其用於靜態內容和快取。
在 Ubuntu/Debian 上安裝 HAProxy
使用 apt 安裝,然後設定前端/後端、健康檢查和選用功能。 SSL 終止。
sudo apt update
sudo apt install -y haproxy
# Enable HAProxy at boot
sudo systemctl enable haproxy
# Verify version
haproxy -v基本HTTP負載平衡,採用輪詢和健康檢查機制:
# /etc/haproxy/haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
maxconn 50000
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5s
timeout client 50s
timeout server 50s
option http-server-close
option redispatch
retries 3
frontend fe_http
bind *:80
mode http
option forwardfor
default_backend be_app
backend be_app
mode http
balance roundrobin
option httpchk GET /health
http-check expect status 200
server app1 10.0.0.11:80 check
server app2 10.0.0.12:80 check
listen stats
bind *:8404
mode http
stats enable
stats uri /stats
stats refresh 10ssudo haproxy -c -f /etc/haproxy/haproxy.cfg # syntax check
sudo systemctl restart haproxy
sudo systemctl status haproxy --no-pager新增 HTTPS(SSL 使用 Let's Encrypt 或您自己的憑證包進行終止:
# Concatenate fullchain + private key into a single PEM (PEM must include key)
sudo mkdir -p /etc/haproxy/certs
sudo cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem | sudo tee /etc/haproxy/certs/example.com.pem > /dev/null
sudo chmod 600 /etc/haproxy/certs/example.com.pem
# Update haproxy.cfg to add HTTPS frontend
frontend fe_https
bind *:443 ssl crt /etc/haproxy/certs/example.com.pem alpn h2,http/1.1
mode http
redirect scheme https code 301 if !{ ssl_fc }
option forwardfor
http-response set-header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
default_backend be_app
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl reload haproxy可選:為有狀態應用程式(例如,舊版應用程式)啟用黏性會話 PHP 會話):
backend be_app
mode http
balance roundrobin
cookie SRV insert indirect nocache
option httpchk GET /health
server app1 10.0.0.11:80 check cookie s1
server app2 10.0.0.12:80 check cookie s2在 RHEL/AlmaLinux/Rocky 上安裝 HAProxy
sudo dnf install -y haproxy
sudo systemctl enable haproxy
sudo systemctl start haproxy
# SELinux: allow HAProxy to make outbound connections if needed
sudo setsebool -P haproxy_connect_any 1
# Firewalld: open HTTP/HTTPS and stats
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --add-port=8404/tcp --permanent
sudo firewall-cmd --reload安裝 Nginx 作為負載平衡器(Ubuntu/RHEL)
Nginx 它非常適合用於七層負載平衡和反向代理。預設情況下,它使用被動健康檢查(當上游發生錯誤時進行故障轉移)。
# Ubuntu/Debian
sudo apt update && sudo apt install -y nginx
sudo systemctl enable nginx
# RHEL family
sudo dnf install -y nginx
sudo systemctl enable --now nginx
sudo firewall-cmd --add-service=http --add-service=https --permanent
sudo firewall-cmd --reload建立用於HTTP負載平衡的上游和伺服器區塊:
# /etc/nginx/conf.d/lb.conf
upstream app_backend {
least_conn;
server 10.0.0.11:80 max_fails=3 fail_timeout=30s;
server 10.0.0.12:80 max_fails=3 fail_timeout=30s;
keepalive 64;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://app_backend;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
location = /health {
access_log off;
add_header Content-Type text/plain;
return 200 "OK";
}
}sudo nginx -t
sudo systemctl reload nginx對於 HTTPS,請使用 Certbot 或您的憑證提供者安裝證書,或終止 TLS。 Nginx 並將純 HTTP 轉送到後端。
高可用性:使用 Keepalived 新增虛擬 IP
為避免單點故障,部署兩個負載平衡節點(LB1 和 LB2),並使用 VRRP(Keepalived)協定在它們之間共用一個虛擬 IP 位址(VIP)。如果 LB1 發生故障,LB2 將自動接管。
# Install Keepalived
# Ubuntu/Debian
sudo apt install -y keepalived
# RHEL family
sudo dnf install -y keepalived
# Allow binding to VIP before assignment (recommended on the LB that runs HAProxy/Nginx)
echo "net.ipv4.ip_nonlocal_bind = 1" | sudo tee /etc/sysctl.d/99-nonlocalbind.conf
sudo sysctl --systemKeepalived 設定範例(每個節點使用不同的優先權;優先權越高越好):
# /etc/keepalived/keepalived.conf (LB1 - MASTER)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass StrongSecret123
}
virtual_ipaddress {
203.0.113.50/32 dev eth0
}
track_script {
chk_haproxy
}
}
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
weight -30
}# /etc/keepalived/keepalived.conf (LB2 - BACKUP)
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass StrongSecret123
}
virtual_ipaddress {
203.0.113.50/32 dev eth0
}
track_script {
chk_haproxy
}
}
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
weight -30
}sudo systemctl enable --now keepalived
ip addr show dev eth0 | grep 203.0.113.50 # VIP should appear on MASTER
# Open VRRP (protocol 112) if your firewall filters it (most clouds allow by default)指向你的 DNS A/AAAA 記錄到 VIP。透過停止 LB1 上的 HAProxy 或 Keepalived 來測試故障轉移;VIP 應在幾秒鐘內轉移到 LB2。
安全強化
- 防火牆: 僅允許 80/443 連接埠(以及來自您 IP 位址的 22 連接埠)。按 IP 位址或驗證限制統計資訊端點。
- TLS: 使用現代密碼,啟用 HTTP/2、HSTS、OCSP 裝訂,並自動續訂 Let's Encrypt。
- 頭: 設定 X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Content-Security-Policy(根據您的應用程式允許)。
- 最小特權: 在支援的情況下以非root身分執行服務;保持軟體包更新。
- SELinux/AppArmor: 繼續強制執行並設定所需的布林值(例如,haproxy_connect_any)。
監控和記錄
- HAProxy: 啟用統計資訊端點和 Prometheus 導出器 (haproxy_exporter)。日誌記錄到系統日誌,並使用 ELK 或 Loki 進行解析。
- Nginx: 存取/錯誤日誌,以及用於 Prometheus 的 stub_status 或 nginx-exporter。
- 合成支票: 正常運行時間監控 VIP和後端方面。
- 容量: 於 YouTube 觀看 CPU記憶體、檔案描述符和連接數。
測試負載平衡器
- 基本可達性: curl -I http://example.com 或 https://example.com
- 頭部轉發: curl -I -H “Host: example.com” http://VIP
- 分佈: 暫時在每個後端添加一個回應頭來識別伺服器,然後刷新。
- 加載: ab -n 1000 -c 50 https://example.com 或 siege -c50 -t1M https://example.com
- 故障轉移: 停止一個後端服務;流量應該會無錯誤地轉移。
# Quick troubleshooting helpers
sudo ss -ltnp | grep -E "80|443|8404"
journalctl -u haproxy -f
journalctl -u nginx -f
journalctl -u keepalived -f
curl -I http://127.0.0.1:8404/stats
nginx -t && haproxy -c -f /etc/haproxy/haproxy.cfg常見陷阱(及解決方法)
- SSL 不匹配: 確保 HAProxy PEM 中的完整金鑰鍊和金鑰順序正確;續訂後重新載入。
- 健康檢查失敗: 後端必須提供一個傳回狀態碼為 200 OK 的端點(例如 /health)。如果該端點是公開的,則需要在內部進行保護。
- 會話保持功能失效: 確認 cookie 已插入且應用程式能夠正確識別;避免快取層移除 cookie。
- 代理標頭: 始終轉送 Host 和 X-Forwarded-* 標頭,以保持應用程式 URL 和 HTTPS 偵測正確。
- 防火牆封鎖: 開啟作業系統和雲端安全群組的連接埠。負載平衡器之間必須有 VRRP(協定 112)流量。
- VIP綁定錯誤: 在 VIP 連線之前,對執行代理程式的節點設定 net.ipv4.ip_nonlocal_bind=1。
真實場景
- 大規模應用程式 WordPress: 在 HAProxy 上終止 TLS,快取靜態資源 Nginx 在其後方或 CDN,並且僅在滿足以下條件時才啟用黏性會話: PHP 會話儲存不是集中式的(更好的選擇是:使用 Redis 來儲存會話)。
- API微服務: 使用 HAProxy,透過基於路徑或主機的路由連接到多個後端。使用黏滯表添加速率限制和熔斷機制。
- 零停機部署: 新增的後端節點,清除舊的後端節點(將權重設為 0 或停用),然後在連線完成後將其刪除。
YouStable 提示:簡化負載平衡的基礎設施
如果您不想這樣做 manage 每一件都是你自己做的。 YouStable“ 專用雲端VPS vCPUs、充足的頻寬和可選的浮動 IP 使 HAProxy/Nginx 叢集配置很簡單。我們的支援團隊可以指導您如何實現最佳實踐。 SSL安全性、高可用性,且不受廠商鎖定。
SEO友善摘要:如何在Linux伺服器上安裝負載平衡器
- 選擇工具: HAProxy(高級 L4/L7)或 Nginx (L7 反向代理)。
- 透過 apt/dnf 安裝並啟用服務。
- 配置前端: 80/443 附健康檢查、標題和 SSL 終止。
- 定義後端: 伺服器集區具有檢查功能,並可選擇啟用會話保持功能。
- 安全: 加強 TLS、防火牆和管理端點的安全防護。
- 規模和HA: 增加第二個 LB 和 Keepalived VIP。
- 監測和測試: 指標、日誌和綜合檢查。
常見問題:在 Linux 伺服器上安裝負載平衡器
對於 Linux 負載平衡而言,HAProxy 和 HAProxy 哪個比較好? Nginx?
對於大多數生產環境而言,HAProxy 提供更豐富的健康檢查、進階路由和詳細的指標。 Nginx 如果您已經將其用作…,那麼它就非常棒。 Web服務器 兩者都需要簡單的 L7 負載平衡。它們都能很好地處理高流量;選擇時應根據功能需求和團隊熟悉程度而定。
第 4 層負載平衡和第 7 層負載平衡有什麼不同?
第 4 層(TCP/UDP)轉送連接,無需檢查 HTTP 協定。它速度快、效率高(例如,IPVS、TCP 模式下的 HAProxy)。第 7 層瞭解 HTTP/HTTPS 協議,支援基於路徑的路由、頭部操作、Cookie 等功能。 SSL 終止。對於需要更智慧路由的 Web 應用程序,請使用 L7。
我該如何添加 SSL 到我的Linux負載平衡器?
在負載平衡器上使用 Let's Encrypt 或提供者所發出的憑證終止 TLS 連線。在 HAProxy 中,使用包含完整憑證鍊和私鑰的 PEM 檔案。 Nginx設定 ssl_certificate 和 ssl_certificate_key。強制使用強密碼、HTTP/2 和 HSTS,並自動續期。
如何才能使負載平衡器具有高可用性?
部署至少兩個負載平衡節點,並使用 Keepalived/VRRP 協定配置虛擬 IP 位址。 DNS 分配給 VIP。如果主負載平衡器發生故障,備份負載平衡器將自動接管。確保兩個節點透過自動化方式共享憑證和配置。
WordPress 需要會話保持功能嗎? PHP 應用程序嗎?
優先使用集中式會話(Redis/Memcached),以便任何後端都能處理任何請求。如果無法實現集中式會話,請在 HAProxy 中啟用黏性會話(cookie)。 Nginx 暫時使用 IP 雜湊作為權宜之計。長遠來看,應將會話和上傳操作外部化,以避免使用者與單一節點耦合。
如何監控Linux負載平衡器?
使用 HAProxy 的統計頁面和 Prometheus haproxy_exporter,或者 Nginx 使用 nginx-exporter/stub_status 記錄日誌。追蹤反應時間、錯誤、連線數和後端健康狀況。集中管理日誌,並針對 VIP 可及性和後端故障設定警報。
我可以使用同一台伺服器進行負載平衡和網站託管嗎?
可以這樣做,但角色分離能提高可靠性、安全性和可擴展性。對於小型網站,單一角色即可滿足需求。 Nginx 可以提供靜態內容並代理到應用程式伺服器。對於規模較大的堆疊,應專用負載平衡器並獨立擴展後端,理想情況下應部署在雲端 VPS 上,例如 YouStable.
下一步
- 首先在 Linux VPS 上使用 HAProxy,並設定健康檢查。
- 加入 TLS 終止和強化標頭。
- 部署輔助負載平衡器和 Keepalived 以實現高可用性。
- 使用 Ansible 實現設定和證書同步自動化。
- 使用 Prometheus/Grafana 進行監控,並定期測試故障轉移。
按照上述步驟,您可以自信地在 Linux 伺服器上安裝負載平衡器,擴展應用程序,並保持高正常運行時間。如果您想更快地入門, YouStable的 VPS 平台和專家指導可以幫助您在數小時內(而不是幾天內)部署彈性負載平衡架構。
