如何插入一个延迟响应与nginx?

我有一个在http://myapp.com/do?arg=x上做一些工作的fast-cgi应用程序。 这项工作可能需要几分钟的时间。 所以我想继续将用户redirect到相同的URL(使用307),直到作业完成,并以200 OK提供结果。 我想慢慢的做出回应,让客户端30s(例如)得到307.显然,我不想在后端做,因为我需要处理其他工作。 有可能告诉nginx插入一个延迟,或速度限制对一个特定的URL的响应?

我看过limit_req,但我不认为它可以用来限制唯一的URL( http://myapp.com/do?arg=x与http://myapp.com/do?arg=y )而是唯一的IP地址。

您可能需要重新构build应用程序以更好地处理这种情况。 我会有两个脚本:一个是用户点击的网页。 第二个是后台脚本,这个工作。

脚本二可以是一个守护进程,或者如果你的环境从脚本支持它,你可以使用非阻塞分支。 脚本一应该在脚本2中启动工作,然后使用类似EventStream (或WebSocket,尽pipe这是一个重大的矫枉过正)更新状态的数据推送数据给用户。 完成后,您可以发送200或其他指示。

我已经解决了这个解决scheme:

  1. 发送307与标题:
    • 传输编码:分块
    • 内容长度:X
    • caching控制:无caching
    • Pragma:no-cache
    • 每秒写1个字节的块,持续X秒
  2. 200 OK结果