Nginx可通过return指令或alias+静态JSON文件在代理层伪造接口响应,无需后端参与;支持状态码、Header及JSON返回,适用于健康检查、配置获取等简单场景,但不支持动态计算与请求体解析。

可以通过 Nginx 的 return 指令或 sub_filter + 静态响应文件,结合 location 匹配规则,直接在代理层“伪造”后端接口返回,无需真实后端参与。关键在于绕过 upstream 转发,用 Nginx 自身生成响应。
使用 return 指令直接返回 JSON
适用于简单、固定结构的接口模拟(如健康检查、配置获取、空列表等)。Nginx 1.13.10+ 支持 return 返回带 body 的响应:
- 在对应
location块中禁用代理,改用return - 指定 HTTP 状态码、Content-Type 头和 JSON 字符串
- 注意:JSON 中双引号需转义,换行可用
\n(但实际建议扁平化)
示例配置:
location /api/user/info {<br> add_header Content-Type "application/json; charset=utf-8";<br> return 200 '{"code":0,"data":{"id":123,"name":"mock-user"},"msg":"success"}';<br>}用 static file + alias 返回预置 JSON 文件
适合返回较复杂、含换行/缩进或需多版本切换的响应。把 JSON 写成文件,由 Nginx 直接读取并返回:
- 将 JSON 文件放在 Nginx 可读路径,如
/usr/share/nginx/mock-responses/user.json - 用
alias映射请求路径到该文件(注意末尾斜杠与路径匹配逻辑) - 务必设置
default_type application/json或显式add_header
示例配置:
location = /api/order/list {<br> alias /usr/share/nginx/mock-responses/orders.json;<br> add_header Content-Type "application/json; charset=utf-8";<br> # 禁用缓存便于调试<br> add_header Cache-Control "no-store, no-cache";<br>}结合 map 和变量实现条件化模拟
当需要根据请求参数(如 query string)、Header 或路径片段返回不同响应时,可用 map 提前提取变量,再驱动 return 或 alias:
- 在
http块中定义map,例如提取$arg_env判断环境 - 在
location中用if(仅限简单判断)或直接基于 map 变量选择文件路径或响应内容 - 避免在
if中使用return或proxy_pass混用,易出错;推荐用 map 控制 alias 目标
示例(按 env 参数选 mock 文件):
http {<br> map $arg_env $mock_file {<br> dev "dev.json";<br> test "test.json";<br> default "base.json";<br> }<br><br> server {<br> location /api/config {<br> alias /usr/share/nginx/mock-responses/$mock_file;<br> add_header Content-Type "application/json";<br> }<br> }<br>}注意事项与限制
Nginx 模拟有明确边界,不适合替代完整 Mock 服务:
- 不支持动态计算(如时间戳、随机 ID),所有内容必须静态预设
- 无法读取请求 body 做逻辑判断(
$request_body在非 proxy 场景不可靠) - 大文件响应建议用
sendfile on;小 JSON 直接return更高效 - 调试时开启
error_log /var/log/nginx/error.log debug;查看匹配逻辑











