nginx接口mock是通过location拦截路径并用return直接返回预设json实现的轻量级模拟方案,需配置精确匹配、设置content-type和cors头,并注意重载配置与调试验证。

用 Nginx 做接口 Mock,本质是让 Nginx 在特定路径下不转发到真实后端,而是直接返回预设的 JSON 响应。它轻量、无需启服务、适合联调初期或后端未就绪时快速模拟接口行为。
配置 location 拦截目标接口路径
在 server 块中,用精确匹配(=)或前缀匹配(^~)捕获需要 Mock 的接口 URL:
- 推荐用
= /api/user/info实现完全匹配,避免误伤其他类似路径 - 若需批量 Mock,可用
^~ /api/mock/,再配合内部重写或变量控制响应内容 - 确保该 location 优先级高于代理真实后端的通用规则(如
location /api/)
用 return 指令直接返回 JSON 数据
Nginx 1.13.10+ 支持 return 返回带 body 的响应,是最简 Mock 方式:
return 200 '{"code":0,"data":{"id":1,"name":"张三"}}';- 注意:JSON 必须是单行字符串,双引号需转义(如
\"),或改用单引号包裹整个 JSON - 务必设置
Content-Type: application/json,可在 location 内加:
add_header Content-Type "application/json";
进阶:用 stub_status 或 map + variables 动态响应
若需根据请求参数、Header 或方法返回不同数据,可结合 Nginx 变量:
- 用
$arg_id获取 URL 参数(如/api/user?id=100),再通过map映射为不同 JSON 字符串 - 用
$request_method区分 GET/POST,对同一路径返回不同结构(如 GET 返回列表,POST 返回成功空响应) - 复杂逻辑建议用
lua-nginx-module,但纯 Nginx 场景下,静态 JSON + 简单变量已覆盖 80% 联调需求
验证与调试技巧
Mock 不生效?常见原因和检查点:
- 确认 Nginx 配置已重载:
nginx -s reload,不是 restart - 用
curl -v http://localhost/api/user/info查看响应头和 body,确认 status 和 Content-Type 正确 - 开启
error_log /path/to/error.log debug;可追踪 location 匹配过程(生产环境慎开) - 浏览器访问时注意跨域——Nginx Mock 默认无 CORS 头,如需支持前端页面调用,加:
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';











