如何告诉 Nginx 在提供资产之前等待几秒钟?

Bar*_*fen 24 nginx

因此,当我在我编写的应用程序中本地测试诸如 Ajax 之类的东西时,我经常喜欢使用sleep语句在服务器端脚本中添加延迟。它有助于模拟慢速连接等。

有没有办法直接在 Nginx 配置中指定类似的延迟行为,以适用于它所服务的平面 HTML 文件?

我知道您可以在网络级别进行类似的延迟模拟(请参阅此处),但它看起来很混乱,而且对我来说从来没有很好地工作过。

Sam*_*ull 9

更详细地解释如何使用 echo 模块:

如果您从基本配置开始,则加载静态文件和 PHP 文件,如下所示:

location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_pass php;
}
Run Code Online (Sandbox Code Playgroud)

然后可以将其转换为类似的内容,以向静态和 PHP 请求添加延迟:

# Static files
location / {
    echo_sleep 5;
    echo_exec @default;
}
location @default {}

# PHP files
location ~ \.php$ {
    echo_sleep 5;
    echo_exec @php;
}
location @php {
    include fastcgi.conf;
    fastcgi_pass php;
}
Run Code Online (Sandbox Code Playgroud)

这显然可以针对您想要的任何内容进行修改。基本上,将每个位置块移动到一个命名的@location 中。然后在原始位置块中使用echo_sleepecho_exec


Gre*_*cki 5

我想补充一下astlock 的回答,如果你想用简单的方式回复,return那么请注意有一个警告:在延迟响应之后,你必须使用echo,而不是标准return指令echo_sleep,如下所示:

location = /slow-reply {
  echo_sleep 5.0;
  #return 200 'this response would NOT be delayed!';      
  echo 'this text will come in response body with HTTP 200 after 5 seconds';
}
Run Code Online (Sandbox Code Playgroud)

(在 openresty/1.7.10.2 上测试)