国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > Nginx > 正文

Nginx配置代理gRPC的方法

2024-08-30 12:22:04
字體:
來源:轉載
供稿:網友
本篇文章主要介紹了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; }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岳阳市| 绥中县| 和顺县| 张家川| 广南县| 英山县| 赣州市| 华坪县| 阿克| 依安县| 济宁市| 高邑县| 抚州市| 郎溪县| 西盟| 绵阳市| 东平县| 武清区| 砚山县| 桐城市| 海城市| 普陀区| 龙川县| 子洲县| 池州市| 石景山区| 高要市| 库尔勒市| 闽清县| 建湖县| 衡山县| 阳春市| 大余县| 朝阳县| 黔江区| 方山县| 吉安市| 盱眙县| 通化县| 盱眙县| 商洛市|