You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在高版本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反向代理指向这个本地服务:

  1. 编写延迟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添加权限。

  1. 用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

  1. 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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:11:08