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


14

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

有没有一种方法可以直接在Nginx配置中指定类似的延迟行为,该行为将对其所服务的纯HTML文件起作用?

我知道您可以在网络级别上进行类似的延迟仿真(请参阅此处),但看起来很混乱,而且对我而言从来没有做得很好。


您难道不认为Nginx会更加混乱吗?
DukeLion

Answers:



3

我想补充一下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';
}

(在openresty / 1.7.10.2上测试)


0

提供有关如何使用echo模块的详细说明:

如果您是从基本配置开始的,那么它将加载静态文件和PHP文件,如下所示:

location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_pass php;
}

然后可以将其转换为类似这样的内容,以增加静态请求和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;
}

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


-1

您可以将后端服务器设置为接收请求,然后在服务器中延迟响应。Nginx将请求代理到后端服务器。


-3

无法(IHMO)延迟nginx的响应。您必须重新设计应用程序而不是Web服务器才能启用此功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.