上一篇
httpd负载均衡配置文件
- 行业动态
- 2025-04-30
- 4787
httpd负载均衡需启用mod_proxy及mod_proxy_balancer模块,通过ProxySet指定后端服务器,使用BalancerMember定义负载节点,支持轮询或IP哈希等算法
模块启用与基础配置
Apache HTTPD 实现负载均衡需启用 mod_proxy
、mod_proxy_balancer
和 mod_proxy_http
模块,通过 LoadModule
指令加载模块,并定义后端服务器组。
指令 | 作用 | 示例 |
---|---|---|
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 | 支持 HTTP 代理 | 必选(后端为 HTTP) |
<Proxy balancer://mycluster> | 定义后端服务器组 | 必填 |
BalancerMember http://backend1:80 | 添加后端服务器 | 可多条配置 |
基础配置示例:
<VirtualHost :80> ProxyPreserveForwarded ForHeader On ProxyPass / balancer://mycluster/ ProxyPassReverse / <Proxy balancer://mycluster> BalancerMember "http://192.168.1.101:80" route=node1 BalancerMember "http://192.168.1.102:80" route=node2 # 负载均衡策略(默认轮询) ProxySet lbmethod=byrequests </Proxy> </VirtualHost>
高级配置选项
配置项 | 说明 | 示例 |
---|---|---|
lbmethod | 负载均衡算法 | byrequests (轮询)、bytraffic (流量)、bybusyness (繁忙度) |
route | 自定义路由标识 | route=web1 (用于健康检查或权重) |
stickysession | 会话保持(基于 Cookie) | ProxySet stickysession=HTTP_SESSIONID |
heartbeat | 健康检查频率 | ProxySet heartbeat=5 (每5秒检查一次) |
maxfails | 失败阈值后移除节点 | ProxySet maxfails=3 |
健康检查与故障转移:
<Proxy balancer://mycluster> BalancerMember "http://192.168.1.101:80" route=node1 require=all granted BalancerMember "http://192.168.1.102:80" route=node2 require=all granted # 健康检查配置 ProxySet heartbeat=5 maxfails=2 </Proxy>
SSL 终止与后端 HTTPS 处理
若需在前端处理 SSL,需启用 mod_ssl
并配置证书,后端服务器可通过 HTTP 通信。
SSL 终止示例:
<VirtualHost :443> SSLEngine on SSLCertificateFile /path/to/cert.pem SSLCertificateKeyFile /path/to/key.pem ProxyPass / balancer://mycluster/ ProxyPassReverse / </VirtualHost>
测试与调试
- 验证配置语法:
apachectl -t
- 查看日志:检查
error_log
和access_log
确认请求分发情况。 - 模拟请求:使用
curl -I http://your-domain
观察响应头中的X-Backend
字段(需开启LogLevel
)。
相关问题与解答
问题1:如何为不同路径设置不同的负载均衡策略?
解答:通过 ProxyPass
匹配特定路径并定义独立的 <Proxy>
块。
ProxyPass /api/ balancer://api_cluster/ ProxyPass /static/ balancer://static_cluster/
问题2:如何实现会话保持(Sticky Session)?
解答:启用 stickysession
并指定会话 Cookie 或 IP 地址:
ProxySet stickysession=HTTP_SESSIONID|IP