Nginx配置代理gRPC的方法
Nginx 1.13.10新增了對(duì)gRPC的原生支持。本文介紹如何配置Nginx的gRPC。
安裝Nginx
Nginx版本要求:1.13.10。
gRPC必須使用HTTP/2傳輸數(shù)據(jù),支持明文和TLS加密數(shù)據(jù),支持流數(shù)據(jù)的交互。這是為了充分利用 HTTP/2 連接的多路復(fù)用和流式特性。所以在安裝部署nginx時(shí)需要安裝http/2。使用源碼安裝,編譯時(shí)需要加入http_ssl和http_v2模塊:
$ auto/configure --with-http_ssl_module --with-http_v2_module
Nginx以明文的方式發(fā)布gRPC服務(wù)。
nginx是使用http服務(wù)器監(jiān)聽gRPC的請(qǐng)求。
示例:
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服務(wù)器地址,前綴協(xié)議有兩種:
- grpc://:與gRPC服務(wù)器端交互是以明文的方式
- grpcs://:與gRPC服務(wù)器端交互式以TLS加密方式
gRPC服務(wù)器地址的前綴“grpc://”是可以忽略,默認(rèn)就是明文交互方式。
此示例里nginx以明文的方式在80端口發(fā)布gRPC,其中代理的gRPC在后端也是以明文的方式交互。
注意:Nginx是不支持在明文的端口上同時(shí)支持http1和http2的。如果要支持這兩種的http協(xié)議,需要設(shè)置為不同的端口。
Nginx以TLS加密方式公開gRPC服務(wù)
在生成環(huán)境建議使用Nginx是以加密的方式發(fā)布gRPC。這種情景需要在Nginx添加一個(gè)加密層。
在開發(fā)/測(cè)試環(huán)境可以使用自簽名證書,關(guān)于自簽名證書可以參考此簡(jiǎn)明教程。
配置示例:
server {
listen 1443 ssl http2;
ssl_certificate ssl/cert.pem;
ssl_certificate_key ssl/key.pem;
location / {
grpc_pass grpc://localhost:50051;
}
}
示例里在nginx層給gRPC服務(wù)對(duì)外添加了ssl,而內(nèi)部代理到gRPC服務(wù)器仍然是使用明文的交互方式。
gRPC客戶端也是需要TLS加密。如果是使用自簽名證書等未經(jīng)信任的證書,客戶端都需要禁用證書檢查。在部署到生產(chǎn)環(huán)境時(shí),需要將自簽名證書換成由可信任證書機(jī)構(gòu)發(fā)布的證書,客戶端也需要配置成信任該證書。
代理加密的gRPC
如果Nginx內(nèi)部代理的gRPC也需要以加密的方式交互,這種情況就需要把明文代理協(xié)議grpc://替換為grpcs://。這首先要gRPC服務(wù)器是以加密的方式發(fā)布服務(wù)的。
nginx層修改如下:
grpc_pass grpcs://localhost:50051;
nginx路由gRPC請(qǐng)求
如果后端有多個(gè)gRPC服務(wù)端,其中每個(gè)服務(wù)端都是提供不同的gRPC服務(wù)。這種情況可以使用一個(gè)nginx接收客戶端請(qǐng)求,然后根據(jù)不同的路徑分發(fā)路由到指定的gRPC服務(wù)器。使用location區(qū)分:
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;
}
對(duì)gRPC請(qǐng)求做負(fù)載均衡
在后端有多個(gè)gRPC服務(wù)器,它們都是同一個(gè)gRPC服務(wù),這種情況可以結(jié)合nginx的upstream可以對(duì)gRPC的請(qǐng)求做負(fù)載均衡。
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指定定義了統(tǒng)一gRPC服務(wù)的服務(wù)器組。在grpc_pass指定的gRPC服務(wù)器地址使用upstream定義的服務(wù)器組。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Nginx中的geo模塊與利用其配置負(fù)載均衡的示例
這篇文章主要介紹了詳解Nginx中的geo模塊與利用其配置負(fù)載均衡的示例,文中對(duì)模塊的geo指令使用有比較詳細(xì)的介紹,需要的朋友可以參考下2016-01-01
nginx proxy_buffer_size解決后端服務(wù)傳輸數(shù)據(jù)過多,header過大問題
這篇文章主要介紹了nginx proxy_buffer_size解決后端服務(wù)傳輸數(shù)據(jù)過多,header過大問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
Nginx指令add_header和proxy_set_header的區(qū)別及說明
這篇文章主要介紹了Nginx指令add_header和proxy_set_header的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
503 service unavailable錯(cuò)誤解決方案講解
這篇文章主要介紹了503 service unavailable錯(cuò)誤解決方案講解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
keepalived對(duì)nginx進(jìn)行高可用搭建及原理詳解
這篇文章主要為大家介紹了keepalived對(duì)nginx進(jìn)行高可用搭建及原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
借用nginx.vim工具進(jìn)行語法高亮和格式化配置nginx.conf文件
今天小編就為大家分享一篇關(guān)于借用nginx.vim工具進(jìn)行語法高亮和格式化配置nginx.conf文件,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02
NGINX服務(wù)器配置404錯(cuò)誤頁面轉(zhuǎn)向的方法
這篇文章主要為大家詳細(xì)介紹了NGINX服務(wù)器配置404錯(cuò)誤頁面轉(zhuǎn)向的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12

