apache本身不提供mock功能,但可通过反向代理将特定路径请求(如/api/payment/)转发至本地moco服务(如http://127.0.0.1:12306),实现无缝mock测试;需启用mod_proxy和mod_proxy_http模块,并配置proxypass/proxypassreverse规则。

Apache 代理本身不直接提供 Mock 功能,但它可以配合其他 Mock 工具(如 Moco、WireMock 或 ShenYu 网关的 mock 插件)实现后端接口的 Mock 测试。核心思路是:**用 Apache 作为反向代理,将特定路径的请求转发到本地或内网运行的 Mock 服务,而非真实后端**。这样前端或测试环境无需改代码,只需保持原有域名和路径,即可无缝切换 Mock 响应。
配置 Apache 反向代理指向 Mock 服务
确保 Apache 启用了 mod_proxy 和 mod_proxy_http 模块:
- 在 httpd.conf 或虚拟主机配置中取消以下行的注释:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
- 添加反向代理规则,例如将所有 /api/payment/ 开头的请求转发到本地 Moco 服务(运行在 127.0.0.1:12306):
ProxyPass /api/payment/ http://127.0.0.1:12306/api/payment/
ProxyPassReverse /api/payment/ http://127.0.0.1:12306/api/payment/
- 重启 Apache 生效:
sudo apachectl restart(macOS/Linux)或通过服务管理器重启(Windows)
准备一个可被代理的 Mock 服务
推荐使用轻量级工具 Moco(无需部署容器,单 jar 启动):
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 新建 mock.json,定义响应逻辑:
[
{
"request": { "method": "POST", "uri": "/api/payment/create" },
"response": { "status": 200, "jsonBody": { "code": 0, "msg": "success", "orderNo": "${int|10000-99999}" } }
}
]
- 启动 Moco:
java -jar moco-runner-1.0.0-standalone.jar http -p 12306 -c mock.json - 验证:直接访问 http://localhost:12306/api/payment/create 应返回预设 JSON;再通过 Apache 域名(如 https://test.example.com/api/payment/create)访问,也应得到相同响应
支持多环境与条件路由(进阶用法)
可在 Apache 中按 Host、Header 或路径前缀区分 Mock 与真实后端:
- 对测试域名启用 Mock:
<virtualhost> ServerName test-api.example.com ... ProxyPass / http://127.0.0.1:12306/ </virtualhost> - 根据请求头启用 Mock(如加 Header X-Mock: true):
RewriteCond %{HTTP:X-Mock} ^true$
RewriteRule ^/api/(.*)$ http://127.0.0.1:12306/api/$1 [P,L]
ProxyPassReverse /api/ http://127.0.0.1:12306/api/
- 这样生产环境调用仍走真实后端,仅带特定 Header 的请求才被代理到 Mock 服务,便于灰度验证
注意事项与替代方案
Apache 代理适合已有 Apache 架构的团队,但需注意:
- 不支持动态生成响应体(如随机 ID、时间戳),需依赖底层 Mock 工具能力(Moco 支持 ${int|min-max},ShenYu mock 插件支持 SpEL 表达式)
- 若需更灵活的规则(如按请求参数匹配不同响应),建议直接使用 WireMock 或 ShenYu 网关 —— 它们内置路由+Mock一体化能力,无需额外代理层
- 线上环境禁用此配置,避免 Mock 泄露;建议仅在开发机或测试服务器启用










