发送 http2 请求时,recv() 在 nginx 错误日志中失败

Posted

技术标签:

【中文标题】发送 http2 请求时,recv() 在 nginx 错误日志中失败【英文标题】:recv() failed in nginx error log when sending http2 request 【发布时间】:2021-11-23 07:56:34 【问题描述】:

发送 grpc-go 请求时在 nginx error.log 中得到以下内容。

2021/10/01 17:06:08 [info] 18799#18799: *9 recv() 在处理 HTTP/2 连接时失败(104:对等方重置连接),客户端:127.0.0.1,服务器:0.0 .0.0:50050

奇怪的是,上述日志记录只发生某些次,并非总是发生。如果您以前遇到过此问题以及如何解决,请告诉我。

【问题讨论】:

【参考方案1】:

Go http.Get, concurrency, and "Connection reset by peer" 的可能重复项

此连接重置的一个可能原因是连接过多,nginx 无法处理

您可以尝试通过在 nginx 全局或虚拟主机配置中添加事件块来增加 nginx 连接限制。然后重启nginx。

events 
   worker_connections 2048;

同时尝试查看您的服务器当时是否运行缓慢。

来源:https://ubiq.co/tech-blog/how-to-fix-nginx-worker-connections-are-not-enough/

【讨论】:

以上是关于发送 http2 请求时,recv() 在 nginx 错误日志中失败的主要内容,如果未能解决你的问题,请参考以下文章

Okhttp3、http2多路复用POST请求高峰负载时响应时间长

无法通过JMeter发送HTTP2请求

无法向 Apache 服务器发出 http2 请求,尽管服务器在响应标头中发送“升级:h2”

如何在接收响应时通过 websocket 发送请求

HTTP2的优点

nginx Http2 Push 在 Vary 时失败:接受标头集