Apache 2.2+ 內建 mod_proxy_balancer 可實現生產級反向代理負載均衡,支援多種演算法、權重分配、故障轉移與即時監控介面。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# 如需其他協議
# LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
# LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
# LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember https://node1.internal:8080
BalancerMember https://node2.internal:8080
</Proxy>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
<Proxy balancer://mycluster>
BalancerMember https://node1:8080 loadfactor=7
BalancerMember https://node2:8080 loadfactor=2
BalancerMember https://node3:8080 loadfactor=1
</Proxy>
ProxySet lbmethod=byrequests # 按請求數(預設)
ProxySet lbmethod=bytraffic # 按流量位元組
ProxySet lbmethod=bybusyness # 按忙碌度(活躍請求最少者優先)
BalancerMember https://standby:8080 status=+H
# 僅在所有主節點不可用時啟用
ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid scolonpathdelim=On
# 支援 Tomcat/JBoss PHPSESSID 等
<Location /balancer-manager>
SetHandler balancer-manager
Require ip 127.0.0.1 10.0.0.0/8 # 嚴格限制訪問來源
</Location>
訪問 https://proxy-host/balancer-manager/ 可視化查看節點狀態、流量、錯誤計數,並支援動態啟用/禁用/調整權重。
| 錯誤 | 原因 | 修復 |
|---|---|---|
No protocol handler valid for URL | 缺少 mod_proxy_http 或 ProxyPass 缺尾隨 / | 載入模組、補全斜線 |
| 502 Bad Gateway | 後端節點不可達、協議不匹配、超時 | 檢查網路、ProxyTimeout、後端日誌 |
| Session 丟失 | 未配置 Sticky Session、Cookie 域名/路徑不匹配 | 啟用 stickysession、統一 Cookie 設定 |
/health),配合 mod_proxy_hcheck(2.4.21+)ProxyPreserveHost On 保留原始 Host 頭balancer:// 狀態、節點錯誤率、延遲分位數