在 Ubuntu 上使用 Apache2 配置负载均衡,通常是通过 mod_proxy、mod_proxy_balancer 等模块实现的(反向代理 + 负载均衡)。下面是一个完整、常用的配置示例。
sudo apt update
sudo apt install apache2
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo a2enmod headers
lbmethod_byrequests是按请求数负载均衡(最常用)
重启 Apache:
sudo systemctl restart apache2
假设:
192.168.1.10192.168.1.20:8080192.168.1.21:8080sudo nano /etc/apache2/sites-available/loadbalancer.conf
<VirtualHost *:80>
ServerName example.com
# 负载均衡器
<Proxy "balancer://mycluster">
BalancerMember "http://192.168.1.20:8080"
BalancerMember "http://192.168.1.21:8080"
# 负载均衡算法
ProxySet lbmethod=byrequests
</Proxy>
ProxyPreserveHost On
ProxyPass "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"
# 可选:会话保持
# Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
</VirtualHost>
sudo a2ensite loadbalancer.conf
sudo a2dissite 000-default.conf # 可选
sudo systemctl reload apache2
在 ProxySet 中修改:
| 策略 | 说明 |
|---|---|
byrequests |
按请求数(默认) |
bytraffic |
按流量 |
bybusyness |
按忙碌程度 |
示例:
ProxySet lbmethod=bytraffic
<Proxy "balancer://mycluster">
BalancerMember "http://192.168.1.20:8080" status=+H
BalancerMember "http://192.168.1.21:8080"
</Proxy>
状态说明:
+H:热备(仅主节点挂了才用)<Location "/balancer-manager">
SetHandler balancer-manager
Require local
</Location>
访问:
http://服务器IP/balancer-manager
如需 HTTPS:
sudo a2enmod ssl
sudo a2ensite default-ssl
并在 VirtualHost *:443 中配置 ProxyPass。
✅ 502 Bad Gateway
✅ 静态资源问题
Host如果你有 具体场景(如 Tomcat / Node / Docker / HTTPS / 会话保持),我可以给你更精确的配置。