天翼云开发者社区 · 2 天前 · 北京

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

本文分享自天翼云开发者社区《在nginx中通过多级代理支持grpc协议》.作者:尹**聪

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经过多层级的转发后仍然保持正常的状态。

推荐阅读
关注数
8771
内容数
481
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息