当前位置:首页 > 行业动态 > 正文

httpd负载均衡配置文件

httpd负载均衡需启用mod_proxy及mod_proxy_balancer模块,通过ProxySet指定后端服务器,使用BalancerMember定义负载节点,支持轮询或IP哈希等算法

模块启用与基础配置

Apache HTTPD 实现负载均衡需启用 mod_proxymod_proxy_balancermod_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 添加后端服务器 可多条配置

基础配置示例:

httpd负载均衡配置文件  第1张

<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>

测试与调试

  1. 验证配置语法apachectl -t
  2. 查看日志:检查 error_logaccess_log 确认请求分发情况。
  3. 模拟请求:使用 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
0