nginx反向代理GRPC


Nginx 1.13.10新增了對GRPC的原生支持。

安裝Nginx

Nginx版本要求:1.13.10+
gRPC必須使用HTTP/2傳輸數據,支持明文和TLS加密數據,支持流數據的交互。這是為了充分利用 HTTP/2 連接的多路復用和流式特性。所以在安裝部署nginx時需要安裝http/2。使用源碼安裝,編譯時需要加入http_ssl和http_v2模塊:

./configure --with-http_ssl_module --with-http_v2_module

Nginx以不加密方式代理不加密GRPC服務

示例配置:

http { server { listen 80 http2; # server_name localhost; # access_log logs/host.access.log main; location / { grpc_pass grpc://localhost:8200; } } } 

指令grpc_pass用來指定代理的gRPC服務器地址,前綴協議有兩種: grpc://:與gRPC服務器端交互是以明文的方式
grpcs://:與gRPC服務器端交互式以TLS加密方式

Nginx以加密方式代理不加密GRPC服務

示例:

http { server { listen 443 ssl http2; # server_name localhost; # access_log logs/host.access.log main; ssl_certificate ssl/server.crt; ssl_certificate_key ssl/server.key; # 另一種證書格式 # ssl_certificate ssl/server.pem; # ssl_certificate_key ssl/server.pem; location / { grpc_pass grpc://localhost:8200; } } } 

Nginx根據路徑代理到不同的GRPC服務

如果后端有多個gRPC服務端,其中每個服務端都是提供不同的gRPC服務。這種情況可以使用一個nginx接收客戶端請求,然后根據不同的路徑分發路由到指定的gRPC服務器。示例:

http { server { listen 80 http2; # server_name localhost; # access_log logs/host.access.log main; location /helloworld.Greeter { grpc_pass grpc://192.168.1.11:8200; } location /helloworld.Dispatcher { grpc_pass grpc://192.168.1.12:8200; } } } 

Nginx對GRPC做負載均衡

在后端有多個gRPC服務器,它們都是同一個gRPC服務,這種情況可以結合nginx的upstream可以對gRPC的請求做負載均衡。示例:

http { upstream grpcservers { server 192.168.1.11:8200; server 192.168.1.12:8200; } server { listen 80 http2; # server_name localhost; # access_log logs/host.access.log main; location /helloworld.Greeter { grpc_pass grpc://grpcservers; } } } 

Go GRPC客戶端建立連接

連接明文服務端

conn, err := grpc.Dial("127.0.0.1", grpc.WithInsecure()) if err != nil { panic(err) } helloworld := pb.NewHellowordClient(conn) 

連接tls單向認證的服務端

// serverNameOverride 填證書的CN值 tls, err := credentials.NewClientTLSFromFile("./server.crt", "test.com") if err != nil { panic(err) } conn, err := grpc.Dial("127.0.0.1", grpc.WithTransportCredentials(tls)) if err != nil { panic(err) } helloworld := pb.NewHellowordClient(conn) 

參考

https://www.jb51.net/article/137330.htm



作者:M醉逍遙
鏈接:https://www.jianshu.com/p/6c5a870e070d
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM