如何在高版本Nginx中添加响应延迟?适配Mock API需求
解决方案:在高版本Nginx中创建带指定延迟的Mock API端点
方法1:极简Lua实现(无需复杂Lua知识)
虽然Lua集成听起来有门槛,但只需要几行基础代码就能实现延迟+Mock响应,大部分预编译Nginx包(比如OpenResty)或nginx-extras类扩展包默认都带ngx_http_lua_module,直接复制配置就能用:
location /mock/api { # 模拟实际API的响应延迟,单位为秒,示例为200ms rewrite_by_lua_block { ngx.sleep(0.2) } # 返回自定义Mock响应,支持JSON/HTML等任意格式 return 200 '{"code":0,"data":"mock content","msg":"success"}'; }
核心就是ngx.sleep()控制延迟,return直接输出Mock内容,完全不需要复杂Lua逻辑,新手照搬就能生效。
方法2:无Lua方案——本地脚本+反向代理
如果不想接触Lua,可以用简单的Shell脚本实现延迟,再通过Nginx反向代理指向这个本地服务:
- 编写延迟Mock脚本
/usr/local/bin/mock-delay.sh,赋予执行权限:
#!/bin/bash # 设定延迟时间,示例为300ms sleep 0.3 # 返回HTTP响应头+Mock内容 echo -e "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{\"code\":0,\"data\":\"mock data\"}"
执行chmod +x /usr/local/bin/mock-delay.sh添加权限。
- 用systemd将脚本转为本地服务,创建
/etc/systemd/system/mock-api.service:
[Unit] Description=Mock API with custom delay After=network.target [Service] ExecStart=/usr/local/bin/mock-delay.sh StandardInput=socket StandardOutput=socket ListenStream=127.0.0.1:8081 Restart=always [Install] WantedBy=multi-user.target
启动服务:systemctl daemon-reload && systemctl start mock-api.service
- Nginx配置反向代理:
location /mock/api { proxy_pass http://127.0.0.1:8081; proxy_set_header Host $host; }
方法3:原生Perl模块实现(可选)
如果你的Nginx编译了ngx_http_perl_module,也可以用Perl实现延迟:
location /mock/api { perl 'sub { my $r = shift; $r->sleep(0.2); # 延迟200ms $r->send_http_header("application/json"); $r->print("{\"code\":0,\"msg\":\"mock success\"}"); return OK; }'; }
注意:部分原生Nginx默认未编译该模块,需确认编译参数或安装对应扩展包。
内容的提问来源于stack exchange,提问作者Ali k.
相关产品推荐
相关产品推荐

