Apache可通过mod_proxy、mod_proxy_http和mod_proxy_balancer实现轻量级边缘代理,支持路由分发、健康检查(hcmethod=GET等)、粘性会话(stickysession=JSESSIONID)及HTTPS终止,适用于已知地址的Java微服务反向代理场景。

Apache 本身不管理微服务注册与发现,但通过 mod_proxy 和 mod_proxy_balancer 可以作为轻量级边缘代理,将 HTTP 流量统一分发到已知地址的 Java 微服务实例。关键不是替代服务网格,而是做好反向代理层的路由、健康感知和会话控制。
启用必要模块并定义后端集群
确保以下模块已加载(在 httpd.conf 或虚拟主机配置中):
-
mod_proxy:提供基础代理能力 -
mod_proxy_http:支持 HTTP 协议转发(适用于 Spring Boot/Tomcat 等) -
mod_proxy_balancer:启用负载均衡逻辑 -
mod_ssl(如需 HTTPS 终止)
然后声明一个负载均衡组:
<Proxy balancer://ms-cluster><br> BalancerMember http://10.0.1.10:8080 route=svc-a loadfactor=2<br> BalancerMember http://10.0.1.11:8080 route=svc-b loadfactor=1<br> ProxySet lbmethod=bybusyness<br></Proxy>
其中 loadfactor 控制权重,lbmethod 可选 byrequests(默认)、bytraffic 或 bybusyness(适合响应时间差异大的场景)。
配置主动健康检查避免请求打到故障节点
Apache 默认不做后端存活探测,必须显式启用健康检查:
- 推荐使用
mod_proxy_hcheck(Apache 2.4.43+):BalancerMember http://10.0.1.10:8080 hcmethod=GET hcinterval=10 hcuri=/actuator/health hcfail=3 hcpass=2 - 若版本较旧,可用
ping参数做 TCP 层探测:BalancerMember http://10.0.1.10:8080 ping=5(单位秒,表示连接建立超时) - 所有后端必须暴露一致的健康接口(如
/actuator/health),且返回 HTTP 200 才视为健康
处理微服务会话一致性需求
若 Java 微服务仍依赖本地 HttpSession(未接入 Redis 或 Session 外置),需开启粘性会话:
- 在
<proxy></proxy>块中添加:ProxySet stickysession=JSESSIONID|jsessionid - 确保后端应用返回的
Set-Cookie: JSESSIONID=xxx; Path=/; HttpOnly中Path为/,且不带Secure标志(除非 Apache 也走 HTTPS) - 更可持续的做法是推动微服务无状态化:用 JWT 替代 session,或统一接入外部 session 存储
配合 SSL 终止简化后端部署
在 Apache 层解密 HTTPS 请求,后端走 HTTP,降低微服务 TLS 配置复杂度:
- 启用
mod_ssl并配置证书 - 在虚拟主机中设置:
SSLEngine on<br>SSLCertificateFile /path/to/cert.pem<br>SSLCertificateKeyFile /path/to/key.pem
- 保持
ProxyPass指向balancer://ms-cluster/(HTTP 地址),无需改用https:// - 如需透传客户端真实 IP,加:
RequestHeader set X-Forwarded-Proto "https"<br>RequestHeader set X-Forwarded-Port "443"


















