在 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
启用后重启 Apache:
sudo systemctl restart apache2
sudo nano /etc/apache2/sites-available/loadbalancer.conf
<VirtualHost *:80>
ServerName your-domain.com
# 负载均衡管理器(可选,用于查看状态)
<Location /balancer-manager>
SetHandler balancer-manager
Require ip 192.168.1.0/24
</Location>
<Proxy "balancer://mycluster">
BalancerMember "http://192.168.1.101:8080"
BalancerMember "http://192.168.1.102:8080"
# 负载均衡策略
ProxySet lbmethod=byrequests
</Proxy>
ProxyPreserveHost On
ProxyPass "/balancer-manager" !
ProxyPass "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"
</VirtualHost>
sudo a2ensite loadbalancer.conf
sudo a2dissite 000-default.conf # 可选
sudo systemctl reload apache2
| 策略 | 说明 |
|---|---|
byrequests |
轮询(默认) |
bytraffic |
按流量 |
bybusyness |
按繁忙程度 |
示例:
ProxySet lbmethod=bytraffic
如果后端有登录状态:
<Proxy "balancer://mycluster">
BalancerMember "http://192.168.1.101:8080" route=node1
BalancerMember "http://192.168.1.102:8080" route=node2
ProxySet stickysession=JSESSIONID
</Proxy>
后端应用需设置 JSESSIONID=node1 或 node2
BalancerMember "http://192.168.1.101:8080" status=+H
或:
ProxySet ping=5
curl http://your-domain.com
多次访问,观察是否分发到不同后端。
sudo apache2ctl configtest
sudo journalctl -u apache2
sudo tail -f /var/log/apache2/error.log
如果你愿意,我可以:
直接告诉我你的使用场景即可。