【问题标题】:nginx rst packet after sending http response发送http响应后的nginx rst数据包
【发布时间】:2021-08-24 18:29:59
【问题描述】:

我正在使用 nginx 1.10.3。

我试图强制的是以下场景:

1.2.3。客户端 服务器 | TCP 3 路 tcp 握手

  1. 客户端 --> 服务器 | HTTP GET
  2. 服务器 --> 客户端 | TCP 确认
  3. 服务器 --> 客户端 | HTTP 响应
  4. 服务器 --> 客户端 | TCP RST、ACK

我尝试在响应 http get 请求后触发发送 RST 数据包。 为此,我在 nginx_conf 文件中设置了“lingering_close off”配置参数,但没有成功。有没有其他方法可以引发这种情况?

【问题讨论】:

  • 到目前为止你尝试了什么?请与我们分享!
  • 首先我尝试使用 nginx.conf 的 lingering_close 参数来配置这个问题。没有成功。在搜索源代码时,我只看到设置了 setsockopt(SO_LINGER) 参数的一个地方(ngx_http_request --> function ngx_http_free_request)。问题是我在发送 http 响应时看不到任何配置或设置此选项的地方。

标签: sockets nginx tcp


【解决方案1】:

最近我们也遇到类似的情况:我们的应用程序错误日志中有很多“Broken pipe”错误。

在分析 tcp 传输信息后,我们发现有时 nginx 会在向上游服务器发送 FIN 后立即发送 'RST'。最终结论,我们认为出现这种行为的原因是当客户端关闭与 nginx 的连接时,nginx 会关闭相关的上游连接,而不是等待上游执行 rest 任务。

所以根据 nginx 文档,我们将配置 proxy_ignore_client_abort on 添加到 nginx 配置文件中。参考:http://nginx.org/

附言我们的 nginx 版本是 1.12。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 2017-07-14
  • 2020-03-18
  • 2019-07-23
  • 1970-01-01
  • 2019-09-07
  • 2011-03-23
相关资源
最近更新 更多