让 Nginx 直接返回固定 JSON:不走后端的假接口

前端联调时想要一个”始终返回 VIP=1”的假接口,去写后端太重,Nginx 直接顶上就行。

最简写法

location /is_vip {
    default_type application/json;
    return 200 '{"code":200,"msg":"操作成功","data":1}';
}

三行做完三件事:

  • default_type application/json;——告诉浏览器返回的是 JSON,不是 text/plain
  • return 200 '...'——直接给 HTTP 200 + 固定 body,不用 upstream
  • 外层用单引号包住整个 JSON,内层用双引号,省得转义

防止被前端缓存

浏览器可能把这个 200 响应缓存下来,联调时容易被误导。加个 no-store:

location /is_vip {
    default_type application/json;
    add_header Cache-Control no-store;
    return 200 '{"code":200,"msg":"操作成功","data":1}';
}

跟根据参数返回不同内容

要根据 query string 分支返回,可以用 if + map

map $arg_uid $vip_result {
    default '{"code":200,"msg":"操作成功","data":0}';
    "1"     '{"code":200,"msg":"操作成功","data":1}';
    "2"     '{"code":200,"msg":"操作成功","data":1}';
}

location /is_vip {
    default_type application/json;
    return 200 $vip_result;
}

访问 /is_vip?uid=1 返回 VIP=1,其它返回 VIP=0。

需要更复杂的 mock 逻辑就该上 OpenResty 或者写真后端了——Nginx 原生更适合”固定返回”这类死数据。

一句话总结

default_type application/json + return 200 '{...}'。联调阶段最快的 mock 接口,比启 Node/Python 都省事。