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