Nginx配置代理gRPC的方法

  

Nginx 1.13.10新增了对gRPC的原生支持。本文介绍如何配置Nginx的gRPC。

  

<>强安装Nginx

  

Nginx版本要求:1.13.10。

  

gRPC必须使用HTTP/2传输数据,支持明文和TLS加密数据,支持流数据的交互。这是为了充分利用HTTP/2连接的多路复用和流式特性。所以在安装部署nginx时需要安装HTTP/2。使用源码安装,编译时需要加入http_ssl和http_v2模块:

        自动/美元配置——with-http_ssl_module with-http_v2_module      

<强> Nginx以明文的方式发布gRPC服务。

  

nginx是使用http服务器监听gRPC的请求。

  

示例:         http {   服务器{   听80 http2;      access_log日志/访问。日志主要;      位置/{   #“grpc://鼻白菏强裳〉?未加密gRPC是默认的   grpc_pass grpc://localhost: 50051;   }   }   }      之前      

指令grpc_pass用来指定代理的gRPC服务器地址,前缀协议有两种:

  
      <李> grpc://:与grpc服务器端交互是以明文的方式李   <李> grpcs://:与gRPC服务器端交互式以TLS加密方式李   
  

gRPC服务器地址的前缀“gRPC://笔强梢院雎?默认就是明文交互方式。

  

此示例里nginx以明文的方式在80端口发布gRPC,其中代理的gRPC在后端也是以明文的方式交互。

  

注意:Nginx是不支持在明文的端口上同时支持http1和http2的。如果要支持这两种的http协议,需要设置为不同的端口。

  

<强> Nginx以TLS加密方式公开gRPC服务

  

在生成环境建议使用Nginx是以加密的方式发布gRPC。这种情景需要在Nginx添加一个加密层。

  

在开发/测试环境可以使用自签名证书,关于自签名证书可以参考此简明教程。
  

  

配置示例:

        服务器{   听1443 ssl http2;      ssl_certificate ssl/cert.pem;   ssl_certificate_key ssl/key.pem;      位置/{   grpc_pass grpc://localhost: 50051;   }   }      之前      

示例里在nginx层给gRPC服务对外添加了ssl,而内部代理到gRPC服务器仍然是使用明文的交互方式。

  

gRPC客户端也是需要TLS加密。如果是使用自签名证书等未经信任的证书,客户端都需要禁用证书检查。在部署到生产环境时,需要将自签名证书换成由可信任证书机构发布的证书,客户端也需要配置成信任该证书。

  

<强>代理加密的gRPC

  

如果Nginx内部代理的gRPC也需要以加密的方式交互,这种情况就需要把明文代理协议gRPC://替换为grpcs://U馐紫纫猤RPC服务器是以加密的方式发布服务的。

  

nginx层修改如下:

        grpc_pass grpcs://localhost: 50051;      

<强> nginx路由gRPC请求

  

如果后端有多个gRPC服务端,其中每个服务端都是提供不同的gRPC服务。这种情况可以使用一个nginx接收客户端请求,然后根据不同的路径分发路由到指定的gRPC服务器。使用区位置分:

        位置/helloworld。迎宾{   grpc_pass grpc://192.168.20.11:50051;   }      位置/helloworld。调度员{   grpc_pass grpc://192.168.20.21:50052;   }      位置/{   根html;   指数指数。html你;   }      之前      

<强>对gRPC请求做负载均衡

  

在后端有多个gRPC服务器,它们都是同一个gRPC服务,这种情况可以结合nginx的上游可以对gRPC的请求做负载均衡。

        上游grpcservers {   服务器192.168.20.21:50051;   服务器192.168.20.22:50052;   }      服务器{   听1443 ssl http2;      ssl_certificate ssl/certificate.pem;   ssl_certificate_key ssl/key.pem;      位置/helloworld。迎宾{   grpc_pass grpc://grpcservers;   error_page 502=/error502grpc;   }      位置=/error502grpc {   内部;   default_type应用程序/grpc;   add_header grpc-status 14;   add_header grpc-message“不可用”;   返回204;   }   }      之前      

其上游指中定定义了统一gRPC服务的服务器组。在grpc_pass指定的gRPC服务器地址使用上游定义的服务器组。
  

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Nginx配置代理gRPC的方法