HTTP DELETE在Nginx和Application之间超时

我们正在使用HTTP DELETE面对一个非常奇怪的错误,症状是偶尔用户在浏览器中得到504(超时)错误。

请求stream经下面描述的步骤:

浏览器 – > Akamai – > AWS ELB – > Nginx – > AWS Application ELB – >应用程序

我们已经完成了请求。 我们发现,当发生错误时,请求会出现在Nginx的access.log中,但不会出现在AWS Application ELB的访问日志中。 所以Nginx是一个返回的超时,它等待60秒,然后返回408.看看访问日志和debugging日志,它看起来像Nginx代理应用程序的请求,但请求不通过。

进一步失败的请求也不会出现在Nginx服务器上的TCP Dump上。

我们收集的一些事实:

  • 这个错误在Safari中不会发生,但偶尔会在Chrome和Firefox中发生,
  • 在Firefox中,如果我们设置network.http.max-connections-per-server 10,问题就会消失。 任何高于(> 10)的值都会反击。
  • 在Akamai中禁用HTTP 2可以减less问题发生的次数。
  • 看来问题只发生在删除HTTP动词。
  • 我们试图直接将Nginx指向应用程序实例(跳过ELB),问题依然存在。

看起来在我们的堆栈中持久连接的pipe理存在一些问题。 然而,我们的设置似乎是正确的,例如保持活动超时设置正确,Akamai 300秒,第一ELB302,Nginx304等等。

我也附上了Nginxdebugging日志的请求,任何一个感兴趣的。

这个失败的请求的情况是:DELETE / api / v2 / cart / ULBlIlptUun70M3h4cPm1t7Paos / line / 122555881 HTTP / 1.1

debugging日志

谢谢!