首页 > 解决方案 > Nginx 1.18 Reverse Proxy for GRPC Streaming 的问题:上游为关闭的流 1 发送帧,同时读取上游

问题描述

我创建了一个简单的容器来使用 .NET 中的 GRPC 上传文件。该容器在我的本地机器和远程工作正常,它由 Nginx 服务器代理。部署容器后,我可以顺利地将文件流式传输到服务器。但是,当我等待回复时:

var response = await stream.ResponseAsync;

我得到以下异常:

例外:HTTP/2 服务器重置流。HTTP/2 错误代码 'INTERNAL_ERROR' (0x2).", DebugException="System.IO.IOException: 请求被中止。---> System.Net.Http.Http2StreamException: HTTP/2 服务器重置流。HTTP/2 错误代码“INTERNAL_ERROR”(0x2)。--- 内部异常堆栈跟踪结束 --- System.Net.Http.Http2Connection.ThrowRequestAborted(Exception innerException) at System.Net.Http.Http2Connection.Http2Stream.CheckResponseBodyState() at System.Net.Http.Http2Connection.Http2Stream .TryReadFromBuffer(Span 1 buffer, Boolean partOfSyncRead) at System.Net.Http.Http2Connection.Http2Stream.ReadDataAsync(Memory1 buffer, HttpResponseMessage responseMessage, CancellationToken cancelToken) at Grpc.Net.Client.StreamExtensions.ReadMessageAsync[TResponse](Stream responseStream, DefaultDeserializationContext deserializationContext, ILogger logger,2 deserializer, String grpcEncoding, Nullable2 compressionProviders, Boolean singleMessage, CancellationToken cancellationToken) at Grpc.Net.Client.Internal.GrpcCall2.RunCall(HttpRequestMessage request, Nullable`1 timeout)")) ---> Grpc.Core.RpcException: Status(StatusCode="Internal", Detail="Error starting gRPC call. IOException: The request was aborted. Http2StreamException: HTTP/2 服务器重置流。HTTP/2 错误代码 'INTERNAL_ERROR' (0x2).", DebugException="System.IO.IOException: 请求被中止。

经过大量调查,似乎 Nginx 反向代理有问题。这是 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;
   proxy_buffering off;
   location / {
      grpc_pass         grpcs://127.0.0.1;
   }
 }

GRPC 服务工作正常并完成所有请求,但 Nginx 引发以下问题(我检查了错误日志):

2021/10/16 17:58:16 [错误] 1137904#1137904: *2371 在读取上游时关闭流 1 的上游发送帧,客户端:******,服务器:mydomain.com,请求:“POST / FileManagementService.Grpc.FileManagem>

标签: nginxstreaminggrpcnginx-reverse-proxy

解决方案


推荐阅读