Stories

Detail Return Return

在nginx中通過多級代理支持grpc協議 - Stories Detail

本文分享自天翼雲開發者社區《在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經過多層級的轉發後仍然保持正常的狀態。

user avatar hetianlab Avatar
Favorites 1 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.