部落格訪客專屬:額外贈送 3 個月免費使用期 + 三年方案 10% 折扣 YSBLOG10
抓住交易

如何在 Linux 伺服器上安裝負載平衡器 – 專家指南 2026

最近更新:九月7,2026 11最小讀取 普拉賈帕蒂
在 Linux 上安裝負載平衡器

在 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 10s
sudo 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 --system

Keepalived 設定範例(每個節點使用不同的優先權;優先權越高越好):

# /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 平台和專家指導可以幫助您在數小時內(而不是幾天內)部署彈性負載平衡架構。

發表評論

您的電子郵件地址不會被公開。帶*號的為必填項。

回到頁首