You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx 1.18反向代理GRPC流式上传时报upstream sent frame错误

问题根因

你遇到的报错核心是Nginx在客户端流式gRPC请求处理过程中,提前关闭了HTTP/2连接流,等到后端gRPC服务处理完上传逻辑返回响应时,对应的流已经被释放,所以触发HTTP/2 INTERNAL_ERROR报错,Nginx日志也对应提示upstream sent frame for closed stream。最常见的触发原因是默认的gRPC读写超时阈值小于大文件上传的实际耗时,或者Nginx版本过低存在gRPC流式处理的兼容性bug。

解决方案
  • 首先确认Nginx版本≥1.20.0稳定版,1.19.x及更早版本对gRPC客户端流、双向流的支持存在已知缺陷,会偶发流提前关闭的问题,版本过低先升级到官方稳定版。
  • 补充gRPC专属超时配置,Nginx默认的grpc_read_timeout、grpc_send_timeout仅为60秒,大文件上传耗时超过该阈值就会被Nginx主动切断流,根据业务最大上传耗时调整参数。
  • 禁用gRPC缓冲,避免Nginx缓存流式数据导致请求时序异常。
  • 确认上游gRPC服务的通信协议匹配,grpcs://代表Nginx和上游服务之间用TLS加密通信,如果上游服务没有配置TLS证书,需要修改为grpc://走明文HTTP/2通信。
  • 调大HTTP/2空闲连接超时阈值,避免Nginx主动回收还在处理上传请求的空闲连接。
修改后的完整配置示例
server {
   listen      13*.**.**.** ssl http2;
   server_name  mydomain.com 13*.**.**.**;
   access_log   /var/log/nginx/myservice.log;
   error_log    /var/log/nginx/myservice_error.log;
   ssl_certificate  /etc/ssl/certs/myssl.crt;
   ssl_certificate_key /etc/ssl/private/myssl.key;
   ssl_prefer_server_ciphers on;

   # gRPC专属配置
   grpc_read_timeout 1h; # 按需调整,比如最大允许上传耗时1小时
   grpc_send_timeout 1h;
   grpc_buffer_size 16M; # 匹配gRPC服务端配置的最大消息大小
   grpc_buffering off;
   
   # HTTP/2连接配置
   http2_idle_timeout 1h;

   location / {
      # 上游服务未开TLS则改为grpc://127.0.0.1
      grpc_pass         grpcs://127.0.0.1;
   }
 }
生效验证
  1. 执行nginx -t检查配置语法是否合法
  2. 执行nginx -s reload平滑重载Nginx配置
  3. 重新测试大文件上传流程,确认等待响应阶段不再抛出异常

内容的提问来源于stack exchange,提问作者Amir H. Bagheri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:45:03