您好,登錄后才能下訂單哦!
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://”是可以忽略,默認就是明文交互方式。
此示例里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; } }
其中upstream指定定義了統一gRPC服務的服務器組。在grpc_pass指定的gRPC服務器地址使用upstream定義的服務器組。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。