当前位置 主页 > 服务器问题 > nginx问题汇总 >

Nginx配置代理gRPC的方法

栏目:nginx问题汇总 时间:2018-10-11 16:41

本篇文章主要介绍了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模块:

$ auto/configure --with-http_ssl_module --with-http_v2_module

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

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

示例:

http { server {  listen 80 http2;  access_log logs/access.log main;  location / {   # The 'grpc://' prefix is optional; unencrypted gRPC is the default     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添加一个加密层。

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

配置示例:

server { listen 1443 ssl http2; ssl_certificate ssl/cert.pem; ssl_certificate_key ssl/key.pem; location / {   grpc_pass grpc://localhost:50051; }}

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

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

代理加密的gRPC

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

nginx层修改如下:

grpc_pass grpcs://localhost:50051;

nginx路由gRPC请求

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

location /helloworld.Greeter { grpc_pass grpc://192.168.20.11:50051;}location /helloworld.Dispatcher { grpc_pass grpc://192.168.20.21:50052;}location / { root html; index index.html index.htm;}

对gRPC请求做负载均衡

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

upstream grpcservers { server 192.168.20.21:50051; server 192.168.20.22:50052;}server { listen 1443 ssl http2; ssl_certificate  ssl/certificate.pem; ssl_certificate_key ssl/key.pem; location /helloworld.Greeter {  grpc_pass grpc://grpcservers;  error_page 502 = /error502grpc; } location = /error502grpc {  internal;  default_type application/grpc;  add_header grpc-status 14;  add_header grpc-message "unavailable";  return 204; }}



缩小 缩小 缩小 缩小
IIS7整站下载工具 IIS7批量查询排名 IIS7远程桌面连接工具 iis7-iis网站批量管理 iis7批量替换工具 IIS7服务器专用下载工具 IIS7日志分析工具 IIS7批量PING,服务器批量添加网卡IP小工具 IIS7远程同步备份工具
IIS7网站监控 站群批量SEO查询 批量获取排名域名 批量关键词排名查询 模拟各种蜘蛛 批量友情链接监测 批量检测死链 搜索引擎大全 批量查询外链
批量查询网站标题 批量查询KeyWords 批量查询描述 批量查询网站IP 批量百度收录查询 批量查询百度日收录 批量查询百度周收录 批量查询百度月收录 批量查询360总收录 批量查询360日收录 批量查询网站年龄 批量查询360PC权重 批量查询爱站移动权重 批量查询站长移动权重 批量查询360移动权重 批量查询神马权重 批量查询谷歌PR 批量查询搜狗PR 批量查询百度反链 批量查询爱站首页反链 批量查询爱站内页反链 批量查询百度快照 批量查询搜狗快照 批量icp备案查询 批量网站ip地址查询 批量查询导出链接 批量查询百度V认证 批量查询百度安全 批量查询站长PC权重 批量查询爱站PC权重 批量查询搜狗总收录 站长资源大全 IIS7-cms大全 IIS7站群大全 IIS7虚拟空间大全 IIS7服务器大全 IIS7-VPS大全