美文网首页
nginx反向代理GRPC

nginx反向代理GRPC

作者: M醉逍遥 | 来源:发表于2020-10-10 15:19 被阅读0次

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

相关文章

  • nginx反向代理GRPC

    Nginx 1.13.10新增了对GRPC的原生支持。 [#%E5%AE%89%E8%A3%85nginx]安装N...

  • nginx 反向代理gRpc(32)

    获取全套nginx教程,请访问瓦力博客 gRPC是一个高性能、通用的开源 RPC 框架,其由 Google 主要面...

  • nginx做代理上网

    nginx不仅可以来做反向代理,也可以用来做正向代理(透明代理,代理上网),nginx反向代理看这里nginx反向...

  • 二、架构02-Nginx的反向代理、虚拟主机

    一、Nginx反向代理 1、环境:node01:192.168.32.132 Nginx (前端Nginx反向代理...

  • 01-nginx前端方向代理

    前端反向代理 1.下载nginx 2. 配置nginx.conf反向代理

  • (转载)nginx反向代理TCP,取RTMP流

    nginx反向代理TCP,取RTMP流 一、说明nginx默认只支持HTTP反向代理,如果需要支持TCP反向代理需...

  • nginx代理,负载均衡以及https配置

    Nginx正向代理和反向代理 大家对Nginx反向代理并不陌生,但是很少有人用过Nginx的正向代理。先来通过一组...

  • Nginx应用场景

    反向代理,负载均衡,动静分离 1.反向代理 修改nginx配置,并重新加载 重新加载nginx配置./nginx ...

  • Nginx笔记 2018-01-16

    Nginx 常用功能 Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。Nginx在做反向...

  • nginx配置说明

    Nginx常用功能1、Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。Nginx在做反向...

网友评论

      本文标题:nginx反向代理GRPC

      本文链接:https://www.haomeiwen.com/subject/wccjpktx.html