【问题标题】:nginx 499 errors with node upstream and http2节点上游和 http2 的 nginx 499 错误
【发布时间】:2016-06-27 23:27:17
【问题描述】:

最近,我们将 apache 切换到 nginx,并为我们的 Web 应用程序提供 http2 支持,我们看到了很多 499 错误。

我们的设置:

  • 在 Amazon AWS 上运行的 Ubuntu 机器
  • Nginx/1.9.12 充当节点应用程序(同一台机器)的代理(和 ssl 卸载)
  • 客户端单页应用

我最初的想法是客户端只是关闭浏览器,但从日志中,我看到大约 95% 的客户端处于活动状态,并且在收到 499 后还有请求。

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

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

  • ~95% 的 499 错误是针对 http2 版本的
  • ~95% 的请求来自移动设备
  • 几乎所有客户端都处于活动状态(我们从日志中看到,因为请求失败后,客户端 javascript 向不同端点发出另一个请求)
  • 没有时间模式 - 有时客户端会在 0.1 秒后获得 499,有时会在 3-9 秒后获得 499
  • 日志没有表明上游节点有任何问题,并且这种情况经常发生,并且负载不重。

我尝试将keepalive 添加到上游,并启用proxy_ignore_client_abort,但这似乎没有帮助。

任何提示如何解决这个问题?

【问题讨论】:

  • 你发现了吗?
  • 是的,手机连接不稳定,基本上就是因为网络不稳定、转塔、省电等原因断掉了。这么长时间都不能有可靠的连接,我们改用id轮询一切都很好

标签: nginx


【解决方案1】:

我正在阅读this unanswered question,这表明一个潜在的来源是不耐烦的客户点击刷新按钮。

这似乎和你观察到的一致,clients 是存活的,得到 499 之后还有请求

【讨论】:

  • 不,情况并非如此。如果客户端会刷新,我会看到我们的单页应用程序重新加载,而不是来自客户端的另一个请求,该请求仅在 http 承诺(这是有角度的)失败钩子上执行。至少对于那个长期运行的请求
猜你喜欢
  • 1970-01-01
  • 2016-08-12
  • 2016-10-27
  • 2012-10-10
  • 2017-03-06
  • 2016-07-30
  • 2017-03-25
  • 2015-09-25
  • 2017-11-03
相关资源
最近更新 更多