nginx 499节点上游和http2错误

nginx 499节点上游和http2错误,nginx,Nginx,最近,我们已经将apache切换到了对web应用程序支持http2的nginx,我们看到了相当多的499个错误 我们的设置: 运行在AmazonAWS上的Ubuntu机器 Nginx/1.9.12充当节点应用程序(同一台机器)的代理(和ssl卸载) 客户端上的单页应用程序 我最初的想法是,客户端只需关闭浏览器,但从日志中,我看到约95%的客户端处于活动状态,并且在收到499之后会有请求 499个错误中有55%发生在http2上,45%发生在http1.1版本上,因此这里没有趋势。 80%的请

最近,我们已经将apache切换到了对web应用程序支持http2的nginx,我们看到了相当多的499个错误

我们的设置:

  • 运行在AmazonAWS上的Ubuntu机器
  • Nginx/1.9.12充当节点应用程序(同一台机器)的代理(和ssl卸载)
  • 客户端上的单页应用程序
我最初的想法是,客户端只需关闭浏览器,但从日志中,我看到约95%的客户端处于活动状态,并且在收到499之后会有请求

499个错误中有55%发生在http2上,45%发生在http1.1版本上,因此这里没有趋势。 80%的请求来自移动设备(连接不良?)

但特别令人担心的是,有一个端点可能需要5-15秒才能完成(PUT请求)。对于该端点:

  • 499个错误中约95%是针对http2版本的
  • 约95%的请求来自移动设备
  • 几乎所有的客户端都是活动的(我们从日志中看到了这一点,因为在请求失败后,客户端javascript会向不同的端点发出另一个请求)
  • 没有时间模式-有时客户端在0.1秒后得到499,有时是3-9秒
  • 日志并不表示节点上游有任何问题,而且这种情况经常发生,并且没有重载
我尝试将
keepalive
添加到上游,并启用
proxy\u ignore\u client\u abort
,但这似乎没有帮助

有没有关于如何解决此问题的提示

我在读一篇文章,其中指出一个潜在的来源是不耐烦的客户点击刷新按钮


这似乎与您的观察一致,即客户仍然活着,并且在收到499之后会有请求。

不,情况并非如此。如果客户端点击刷新,我将看到我们的单页应用程序重新加载,而不是来自客户端的另一个请求,它只在http promise(这是angular)失败的钩子上执行。至少对于那个长时间运行的请求,你明白了吗?是的,不稳定的移动连接,基本上是因为网络不稳定、交换塔、省电等原因而被切断的。你不能有一个可靠的连接打开这么长时间,我们切换到id轮询,一切都很好