searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

在nginx中通过多级代理支持grpc协议

2024-06-28 10:02:56
9
0

       gRPC 是由 Google 开源的一个 RPC 框架,旨在统一服务间通信的方式。该框架基于 HTTP/2 协议传输,使用 Protocol Buffers 作为接口描述语言,可以自动生成服务间调用的代码。

nginx提供了一个grpc的模块用于实现grpc协议的反向代理,通过配置上游转发的方式(grpc_pass)即可,跟proxy_pass的使用方式相同,可以通过配置upstream zone来实现负载均衡。但是如果想使用多个层级对grpc请求进行代理的话,会发现grpc客户端会提示 not find trailers的错误。主要是因为nginx在响应过程中会把响应体后面的trailers过滤掉,从而导致客户端接收不到预期的trailers,进而报错。

解决的方案可以在配置文件中通过 add_trailers 这一配置项来添加trailers,不过这种方法比较受限,首先需要知道server端会响应哪些trailes头以及内容;

另外一种解决方案是开发一个模块在nginx的响应过程中,对trailers进行过滤并保存,在响应给上一层级或者客户端时,把trailers进行恢复。这样的话便可以实现trailers经过多层级的转发后仍然保持正常的状态。

0条评论
作者已关闭评论
尹****聪
4文章数
0粉丝数
尹****聪
4 文章 | 0 粉丝
原创

在nginx中通过多级代理支持grpc协议

2024-06-28 10:02:56
9
0

       gRPC 是由 Google 开源的一个 RPC 框架,旨在统一服务间通信的方式。该框架基于 HTTP/2 协议传输,使用 Protocol Buffers 作为接口描述语言,可以自动生成服务间调用的代码。

nginx提供了一个grpc的模块用于实现grpc协议的反向代理,通过配置上游转发的方式(grpc_pass)即可,跟proxy_pass的使用方式相同,可以通过配置upstream zone来实现负载均衡。但是如果想使用多个层级对grpc请求进行代理的话,会发现grpc客户端会提示 not find trailers的错误。主要是因为nginx在响应过程中会把响应体后面的trailers过滤掉,从而导致客户端接收不到预期的trailers,进而报错。

解决的方案可以在配置文件中通过 add_trailers 这一配置项来添加trailers,不过这种方法比较受限,首先需要知道server端会响应哪些trailes头以及内容;

另外一种解决方案是开发一个模块在nginx的响应过程中,对trailers进行过滤并保存,在响应给上一层级或者客户端时,把trailers进行恢复。这样的话便可以实现trailers经过多层级的转发后仍然保持正常的状态。

文章来自个人专栏
个人的专栏
4 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0