apache反向代理转发微服务接口的核心是启用mod_proxy、mod_proxy_http等模块,通过proxypass/proxypassreverse按路径或域名将请求分发至不同端口和语言的后端服务,支持https终止、websocket及健康检查,仅做协议适配与路径路由,不干预业务逻辑。

启用必要模块
Apache 默认禁用代理功能,必须手动加载以下模块(在 httpd.conf 中取消注释):
- mod_proxy.so:代理基础框架
- mod_proxy_http.so:支持 HTTP/HTTPS 后端转发
- mod_proxy_connect.so:支持 CONNECT 方法(如 HTTPS 上游)
- mod_proxy_wstunnel.so(可选):若微服务含 WebSocket(如 Socket.IO、SSE),必须启用
验证是否生效:运行 httpd -M | grep proxy,输出应包含 proxy_module (shared) 和 proxy_http_module (shared)。
按路径隔离微服务
避免所有服务共用根路径,用前缀区分,比如:
-
/api/→ 转发到 Node.js(localhost:3000) -
/svc/→ 转发到 Go(localhost:8080) -
/backend/→ 转发到 Spring Boot(localhost:8081)
配置示例(写入 httpd-vhosts.conf):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<virtualhost>
ServerName api.example.com
ProxyPreserveHost On
ProxyPass /api/ http://localhost:3000/api/
ProxyPassReverse /api/ http://localhost:3000/api/
</virtualhost><virtualhost>
ServerName svc.example.com
ProxyPreserveHost On
ProxyPass /svc/ http://localhost:8080/svc/
ProxyPassReverse /svc/ http://localhost:8080/svc/
</virtualhost>
ProxyPreserveHost On 确保后端收到原始 Host 头,对 JWT 校验、跨域判断、日志追踪很关键。
处理 HTTPS 和 WebSocket
若上游微服务启用了 HTTPS 或需要长连接,需额外配置:
- 转发 HTTPS 后端时,加
ProxyPreserveHost On+SSLProxyEngine On(允许验证或跳过证书校验) - WebSocket 请求(如
/ws或/socket.io)需用ProxyPass+wstunnel协议:ProxyPass /ws/ ws://localhost:3000/ws/ProxyPassReverse /ws/ ws://localhost:3000/ws/ - 避免响应头中 Location 跳转错误:务必配
ProxyPassReverse,否则 302 重定向会暴露内网地址
增强稳定性与可观测性
微服务场景下,单点故障影响大,建议补充以下配置:
- 设置超时:
ProxyTimeout 60(防止慢服务拖垮 Apache) - 启用健康检查(仅限 mod_proxy_balancer):
<proxy balancer:><br> BalancerMember http://localhost:3000 retry=10 timeout=5<br> BalancerMember http://localhost:8080 retry=10 timeout=5<br></proxy><br> ProxyPass /api/ balancer://micro/api/<br> ProxyPassReverse /api/ balancer://micro/api/
- 单独记录代理日志:
ProxyLog "/var/log/apache2/proxy.log"<br> ProxyLogLevel info
不推荐在 Apache 层做负载均衡决策(如轮询多个实例),应交由 Consul、Nacos 或专用网关;Apache 定位是“边缘代理”,专注 TLS 终止、路径路由和基础容错。










