Apache需通过mod_proxy、mod_proxy_http和mod_proxy_balancer模块实现路径级负载分发:先定义balancer组,再用ProxyPass按路径映射到后端服务,注意规则顺序由细到粗。

Apache 本身不直接提供基于路径的负载分发能力——它需要配合 mod_proxy 和 mod_proxy_balancer 模块,通过反向代理方式将不同 URL 路径的请求转发到后端多个服务器(或服务实例),从而实现路径级的负载分发。
启用必要模块
确保以下模块已加载(通常在 httpd.conf 或 mods-enabled/ 中):
-
mod_proxy(核心代理模块) -
mod_proxy_http(支持 HTTP 协议转发) -
mod_proxy_balancer(提供负载均衡管理界面和逻辑) -
mod_rewrite(可选,用于更灵活的路径匹配与重写)
在配置文件中确认类似语句未被注释:
LoadModule proxy_module modules/mod_proxy.so<br>LoadModule proxy_http_module modules/mod_proxy_http.so<br>LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
定义后端服务器组(Balancer)
使用 <Proxy "balancer://myapp"> 块声明一个负载均衡组,并添加多个后端节点:
<Proxy "balancer://myapp"><br> BalancerMember http://192.168.1.10:8080 route=server1<br> BalancerMember http://192.168.1.11:8080 route=server2<br> ProxySet lbmethod=byrequests<br></Proxy>
说明:
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
-
route=server1用于会话保持(需配合stickysession使用) -
lbmethod=byrequests表示按请求数轮询,也可选bytraffic或bybusyness
配置基于路径的代理规则
用 ProxyPass 和 ProxyPassReverse 将特定路径映射到对应 balancer:
# 将 /api/ 下所有请求分发到 myapp 组<br>ProxyPass "/api/" "balancer://myapp/api/"<br>ProxyPassReverse "/api/" "balancer://myapp/api/"<br><br># 将 /static/ 请求分发到另一组(如 CDN 或静态资源集群)<br><Proxy "balancer://static"><br> BalancerMember http://cdn1.example.com<br> BalancerMember http://cdn2.example.com<br></Proxy><br>ProxyPass "/static/" "balancer://static/"<br>ProxyPassReverse "/static/" "balancer://static/"<br><br># 其余路径仍由本机 Apache 直接服务(如 /index.html、/css/)
注意:ProxyPass 必须按路径长度从细到粗书写(例如 /api/v2/ 要写在 /api/ 之前),否则会被更宽泛的规则提前截获。
可选:用 mod_rewrite 实现更复杂路径判断
若需根据路径正则、查询参数或 Host 头做分流,可用 RewriteRule 配合 proxy: 伪协议:
RewriteEngine On<br># 把 /admin/ 开头且 Host 是 manage.example.com 的请求转给管理集群<br>RewriteCond %{HTTP_HOST} ^manage\.example\.com$<br>RewriteRule ^/admin/(.*)$ http://192.168.1.20:8080/admin/$1 [P,L]<br>ProxyPassReverse "/admin/" "http://192.168.1.20:8080/admin/"其中 [P] 标志表示代理,[L] 表示终止后续规则匹配。

















