在 Ubuntu 上用 Apache 做负载均衡,通常是使用 Apache 的 mod_proxy + mod_proxy_balancer 模块,把请求转发到后端多个应用服务器(如 Tomcat、Node、其他 Apache、Nginx 等)。
下面是从零开始的标准配置步骤。
sudo apt update
sudo apt install apache2 -y
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
假设后端有两台服务器:
sudo nano /etc/apache2/sites-available/loadbalancer.conf
<VirtualHost *:80>
ServerName example.com
# 负载均衡器
<Proxy "balancer://mycluster">
BalancerMember "http://192.168.1.10:8080"
BalancerMember "http://192.168.1.11:8080"
# 负载均衡算法
ProxySet lbmethod=byrequests
</Proxy>
ProxyPreserveHost On
ProxyPass "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"
# 可选:查看负载均衡状态
<Location "/balancer-manager">
SetHandler balancer-manager
Require local
</Location>
</VirtualHost>
sudo a2ensite loadbalancer.conf
sudo a2dissite 000-default.conf # 可选,关闭默认站点
sudo systemctl restart apache2
curl http://localhost
多次访问,观察请求是否被分发到不同后端。
访问状态页面(仅本地):
http://localhost/balancer-manager
| 策略 | 说明 |
|---|---|
| byrequests | 按请求数(默认) |
| bytraffic | 按流量 |
| bybusyness | 按繁忙程度 |
示例:
ProxySet lbmethod=bytraffic
BalancerMember "http://192.168.1.10:8080" loadfactor=3
BalancerMember "http://192.168.1.11:8080" loadfactor=1
BalancerMember "http://192.168.1.10:8080" status=+H
BalancerMember "https://192.168.1.10:8443"
(需要 proxy_https)
sudo ufw allow 80
Client
↓
Apache (负载均衡)
↓ ↓
Backend1 Backend2
如果你愿意,我可以:
你后端跑的是什么服务?