Apache不支持请求合并,仅作为边缘代理负责SSL终止、路径路由、健康检查等;需启用mod_proxy、mod_proxy_http、mod_proxy_wstunnel等模块,通过ProxyPass按路径分发至多语言后端,并配置超时、会话保持与负载均衡。

Apache 本身不处理微服务间的请求合并或编排,它只做可靠、可控的请求转发和路由。在微服务架构中,Apache 的合理角色是边缘代理层——负责统一入口、SSL 终止、路径分发、健康检查和基础负载均衡,把不同业务路径精准导向对应语言/框架的后端服务。
启用必要模块并验证
Apache 默认禁用所有代理功能,必须显式加载核心模块,否则 ProxyPass 等指令无效:
- 编辑 httpd.conf,确保以下行未被注释:
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.soLoadModule proxy_connect_module modules/mod_proxy_connect.so - 若后端含 WebSocket(如 Node.js 的 Socket.IO)或需 HTTPS 上游(如 Go 启用 TLS),额外启用:
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so - 保存后执行 httpd -M | grep proxy,确认输出中同时出现
proxy_module和proxy_http_module,且状态为 (shared)
按路径隔离多语言微服务
避免把所有规则写进主配置,推荐在 httpd-vhosts.conf 中定义独立虚拟主机,实现清晰的路径映射与日志分离:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 例如,将 /api/user 转发至 Java Spring Boot 服务(8081):
ProxyPass /api/user/ http://localhost:8081/api/user/ProxyPassReverse /api/user/ http://localhost:8081/api/user/ - 将 /api/order 转发至 Node.js 服务(3000):
ProxyPass /api/order/ http://localhost:3000/api/order/ProxyPassReverse /api/order/ http://localhost:3000/api/order/ - 关键参数 ProxyPreserveHost On 保留原始 Host 头,确保后端服务能正确生成绝对 URL 或处理跨域逻辑
支持 WebSocket 与 HTTPS 上游
现代微服务常依赖长连接(如实时通知、聊天),Apache 需显式支持 WebSocket 协议透传:
- 对含
ws://或wss://的请求,使用 proxy_wstunnel 模块:ProxyPass /ws/ ws://localhost:4000/ws/ProxyPassReverse /ws/ ws://localhost:4000/ws/ - 若后端服务已启用 HTTPS(如 Go 后端自带证书),Apache 可直接代理到
https://地址,无需解密;若需 Apache 统一终止 SSL,则后端用 HTTP,由 Apache 负责加解密 - 务必设置超时参数防止挂起:
ProxyTimeout 30Timeout 60
基础健康检查与会话保持
微服务集群需一定容错能力,Apache 提供轻量级保障:
- 用 mod_proxy_balancer 实现简单轮询或权重分发:
<Proxy balancer://users>BalancerMember http://10.0.1.10:8081 retry=60BalancerMember http://10.0.1.11:8081 status=+H</Proxy>ProxyPass /api/user/ balancer://users/api/user/ - 对 Java 应用,开启粘性会话:
ProxyPass /app/ balancer://apps/app/ stickysession=JSESSIONID|jsessionid - 注意:Apache 不提供高级熔断、限流或动态服务发现,这些应交由专用网关(如 Kong、Envoy)承担

















