成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > nginx作grpc的反向代理踩坑總結(jié)

nginx作grpc的反向代理踩坑總結(jié)

熱門標(biāo)簽:威海人工外呼系統(tǒng)供應(yīng)商 撫順移動400電話申請 貴陽教育行業(yè)電話外呼系統(tǒng) 藍(lán)點外呼系統(tǒng) 烏海智能電話機(jī)器人 寧夏房產(chǎn)智能外呼系統(tǒng)要多少錢 做外呼系統(tǒng)的公司違法嗎 400電話申請方案 在百度地圖標(biāo)注車輛

背景

眾所周知,nginx是一款高性能的web服務(wù)器,常用于負(fù)載均衡和反向代理。所謂的反向代理是和正向代理相對應(yīng),正向代理即我們常規(guī)意義上理解的“代理”:例如正常情況下在國內(nèi)是無法訪問google的,如果我們需要訪問,就需要通過一層代理去轉(zhuǎn)發(fā)。這個正向代理代理的是服務(wù)端(也就是google),而反向代理則相反,代理的是客戶端(也就是用戶),用戶的請求到達(dá)nginx后,nginx會代理用戶的請求向?qū)嶋H的后端服務(wù)發(fā)起請求,并將結(jié)果返回給用戶。

(圖片來自維基百科)

正向代理和反向代理實際上是站在用戶的角度來定義的,正向也就是代理用戶所要請求的服務(wù),而反向則是代理用戶向服務(wù)發(fā)起請求。兩者一個很重要的區(qū)別:

正向代理服務(wù)方不感知請求方,反向代理請求方不感知服務(wù)方。
思考一下上面的例子,你通過代理訪問google時,google只能感知到請求來自代理服務(wù)器,而無法直接感知到你(當(dāng)然通過cookie等手段也可以追蹤到);而通過nginx反向代理時,你是不感知請求具體被轉(zhuǎn)發(fā)到哪個后端服務(wù)器上的。

nginx最常被用于反向代理的場景就是我們所熟知的http協(xié)議,通過配置nginx.conf文件可以很簡單地定義一個反向代理規(guī)則:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       80;
        server_name  localhost;

        
        location / {
            proxy_pass http://domain;
        }
    }
}

nginx從1.13.10以后就支持gRPC協(xié)議的反向代理,配置類似:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       81 http2;
        server_name  localhost;

        
        location / {
            grpc_pass http://ip;
        }
    }
}

但是當(dāng)需求場景更加復(fù)雜的時候,就發(fā)現(xiàn)nginx的gRPC模塊實際上有很多坑,實現(xiàn)的能力不如http完整,當(dāng)套用http的解決方案時就會出現(xiàn)問題

場景

最開始我們的場景很簡單,通過gRPC協(xié)議實現(xiàn)一個簡單的C/S架構(gòu):

但這種單純的直連有些場景下是不可行的,例如client和server在兩個網(wǎng)絡(luò)環(huán)境下,彼此不相連通,那就無法通過簡單的gRPC連接訪問服務(wù)。一種解決辦法是通過中間的代理服務(wù)器轉(zhuǎn)發(fā),用上面說的nginx反向代理gRPC方法:

nginx proxy部署在兩個環(huán)境都能訪問的集群上,這樣就實現(xiàn)了跨網(wǎng)絡(luò)環(huán)境的gRPC訪問。隨之而來的問題是如何配置這個路由規(guī)則?注意我們最開始的gRPC的目標(biāo)節(jié)點都是清晰的,也就是server1和server2的ip地址,當(dāng)中間加了一層nginx proxy后,client發(fā)起的gRPC請求的對象都是nginx proxy的ip地址。那client與nginx建立連接后,nginx如何知道需要將請求轉(zhuǎn)發(fā)給server1還是server2呢?(這里server1和server2不是簡單的同一個服務(wù)的冗備部署,可能需要根據(jù)請求的屬性決定由誰響應(yīng),例如用戶id等,因此不能使用負(fù)載均衡隨機(jī)挑選一個響應(yīng)請求)

解決辦法

如果是http協(xié)議,那有很多實現(xiàn)方法:

通過路徑區(qū)分

請求將server的信息添加在path里,例如:/server1/service/method,然后nginx轉(zhuǎn)發(fā)請求的時候還原為原始的請求:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       80;
        server_name  localhost;

        location ~ ^/server1/ {
            proxy_pass http://domain1/;
        }
        
        location ~ ^/server2/ {
            proxy_pass http://domain2/;
        }
    }
}

注意http://domain/最后的斜杠,如果沒有這個斜杠請求的路徑會是/server1/service/method,而服務(wù)端只能響應(yīng)/service/method的請求,這樣就會報404的錯誤。

通過請求參數(shù)區(qū)分

也可以將server1的信息放在請求參數(shù)里:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       80;
        server_name  localhost;

        location /service/method {
            if ($query_string ~ x_server=(.*)) {
                proxy_pass http://$1;
            }
        }
    }
}

但對于gRPC就沒這么簡單了,首先gRPC不支持URI的寫法,nginx轉(zhuǎn)發(fā)的請求會保留原來的path,無法在轉(zhuǎn)發(fā)的時候修改path,這意味著上述的第一種辦法不可行。其次gRPC是基于HTTP 2.0協(xié)議的,HTTP2沒有queryString這一概念,請求頭里有一項:path代表請求的路徑,例如/service/method,而這一路徑是不能攜帶請求參數(shù)的,也就是:path不能寫為/service/method?server=server1。這意味著上述的第二種方法也不可行。

注意到HTTP2中請求頭:path是指定請求的路徑的,那我們直接修改:path不就行了嗎:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       80 http2;
        server_name  localhost;

        location ~ ^/(.*)/service/.* {
            grpc_set_header :path /service/$2;
            grpc_pass http://$1;
        }
    }
}

但是實際驗證表明這種方法也不可行,直接修改:path的請求頭會導(dǎo)致服務(wù)端報錯,一種可能的錯誤如下:

rpc error: code = Unavailable desc = Bad Gateway: HTTP status code 502; transport: received the unexpected content-type "text/html"

抓包后發(fā)現(xiàn),grpc_set_header并沒有覆蓋:path的結(jié)果,而是新增了一項請求頭,相當(dāng)于請求header里存在兩個:path,可能就是因為這個原因?qū)е路?wù)端報了502的錯誤。

山窮水盡之際想起gRPC的metadata功能,我們可以在client端將server的信息存儲在metadata中,然后在nginx路由時根據(jù)metadata中server的信息轉(zhuǎn)發(fā)給對應(yīng)的后端服務(wù),這樣就實現(xiàn)了我們的需求。對于go語言,設(shè)置metadata需要實現(xiàn)PerRPCCredentials接口,然后在發(fā)起連接的時候傳入這個實現(xiàn)類的實例:

type extraMetadata struct {
    Ip string
}

func (c extraMetadata) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {
    return map[string]string{
        "x-ip": c.Ip,
    }, nil
}

func (c extraMetadata) RequireTransportSecurity() bool {
    return false
}

func main(){
    ...
    // nginxProxy是nginx proxy的ip或域名地址
    var nginxProxy string
    // serverIp是根據(jù)請求屬性計算好的后端服務(wù)的ip
    var serverIp string
    con, err := grpc.Dial(nginxProxy, grpc.WithInsecure(),
        grpc.WithPerRPCCredentials(extraMetadata{Ip: serverIp}))
}

然后在nginx配置里根據(jù)這個metadata轉(zhuǎn)發(fā)到對應(yīng)的server:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       80 http2;
        server_name  localhost;

        location ~ ^/service/.* {
            grpc_pass grpc://$http_x_ip:8200;
        }
    }
}

注意這里使用了$http_x_ip這一語法引用了我們傳遞的x-ip這個metadata信息。這一方法驗證有效,client可以通過nginx proxy成功訪問到server的gRPC服務(wù)。

總結(jié)

nginx的gRPC模塊的文檔太少了,官方文檔只給出了幾個指令的用途,并沒有說明metadata這一方法,網(wǎng)上的文檔也鮮有涉及,導(dǎo)致花了兩三天的時間在排查。將整個過程總結(jié)在這里,希望能幫助到遇到同一問題的人。

到此這篇關(guān)于nginx作grpc的反向代理踩坑總結(jié)的文章就介紹到這了,更多相關(guān)nginx grpc反向代理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標(biāo)簽:周口 銅川 松原 泰州 慶陽 蕪湖 那曲 朝陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《nginx作grpc的反向代理踩坑總結(jié)》,本文關(guān)鍵詞  nginx,作,grpc,的,反向,代理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《nginx作grpc的反向代理踩坑總結(jié)》相關(guān)的同類信息!
  • 本頁收集關(guān)于nginx作grpc的反向代理踩坑總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    春意影院普通入口| 日韩三级av高清片| 免费观看a视频| 久久99精品久久久久久欧洲站| 日本xxxxxxxxxx75| 午夜精品久久久久久久星辰影院| 91av一区| 91手机在线观看| 久久人体av| 国产suv精品一区二区三区| 午夜av中文字幕| 欧美日本中文字幕| 国产精品一区=区| 中文字幕の友人北条麻妃| 久久久久成人精品免费播放动漫| 中文一区一区三区免费| 在线影院av| 欧美视频久久久| 一区二区三区国产| 久久免费小视频| 免费精品99久久国产综合精品| 女人天堂av在线播放| 久久影视中文字幕| 国产成人a人亚洲精品无码| 免费观看欧美大片| 精品香蕉在线观看视频一| 欧美极品欧美精品欧美图片| 在线人成日本视频| 欧美日韩国产成人在线观看| 亚洲乱码在线| gogo亚洲高清大胆美女人体| 亚洲欧美乱综合图片区小说区| 国产精品免费一区二区三区四区| 亚洲女优视频| 国产一区不卡| 日韩一区二区三区国产| 国产一级片网址| av在线理伦电影| 久久久久久国产免费a片| 国产欧美精品一区二区三区| 亚洲激情不卡| 激情五月色综合国产精品| 在线中文字幕视频观看| 91涩漫在线观看| 成人软件在线观看| 国产黄色小视频在线| 国产尤物视频在线观看| 麻豆成全视频免费观看在线看| 不卡大黄网站免费看| 精品乱码一区内射人妻无码| 久久成人18免费观看| 欧美日韩裸体免费视频| 欧美国产中文| 男女做爰猛烈刺激| 亚洲精品成人影院| 不用播放器的免费av| 色综合手机在线| 成人无码一区二区三区| 日本不卡一区二区三区高清视频| 国产精品99久久精品| 国产精品你懂的在线观看| 福利一区福利二区微拍刺激| 在线小视频网址| 久久久亚洲国产精品| 亚洲午夜国产成人av电影男同| 综合激情在线| 国产又粗又长免费视频| 国产精品视频网站在线观看| 一本久道综合色婷婷五月| 亚洲成人精品一区二区| 成人黄色一级大片| 一级黄色录像在线观看| 欧美日韩一二三四| 激情综合五月网| 在线观看天堂av| 成人福利电影精品一区二区在线观看| 人妻 日韩 欧美 综合 制服| 欧美日韩在线观看一区二区三区| 国精产品视频一二二区| 亚洲精品福利资源站| 7777精品久久久大香线蕉| 亚洲日本中文字幕在线| 日韩一区和二区| 韩国午夜理伦三级不卡影院| 国产探花在线观看视频| 国产日韩欧美精品一区二区三区| 国产成a人亚洲| 国产噜噜噜噜久久久久久久久| 中文字幕有码无码人妻av蜜桃| 国产高清免费视频| 日韩一级片在线观看| 波多野结衣电车| www.51av欧美视频| 国产精品久久久久7777婷婷| 日本蜜桃在线观看| 国产suv一区二区三区88区| 日韩大片一区二区| 91免费看网站| caoporn免费在线视频| 国产精品999久久久| 国产成人午夜高潮毛片| 亚洲精品小区久久久久久| 亚洲午夜女主播在线直播| 亚洲伊人网在线观看| 色综合久久久久久久久| 伊人久久大香线蕉综合热线| 精品一区二区在线播放| 狠狠人妻久久久久久综合麻豆| 性做久久久久久久久| 亚洲精品进入| 福利影院在线看| 国产久卡久卡久卡久卡视频精品| 一道本无吗dⅴd在线播放一区| 狠狠操第一页| 亚洲 小说 欧美 激情 另类| 亚洲综合国产激情另类一区| 成人午夜伦理影院| 国产精品白浆| 精品国产一区二区三区在线观看| 不卡影院一区二区| 性欧美暴力猛交另类hd| 欧美精品一本久久男人的天堂| 欧美最顶级的aⅴ艳星| 美国黄色特级片| 亚洲欧美日韩网站| 久久99国产综合精品女同| 日本孕妇大胆孕交无码| jizzjizz在线观看| 懂色av一区| 国模私拍一区二区三区| 丰满人妻一区二区三区无码av| 亚洲欧美激情在线视频| 精品资源在线| 久久国产精品一区| 爱情电影社保片一区| 日韩av密桃| 五月天婷婷色综合| 亚洲啪啪91| 亚洲图片欧美在线| 天堂网在线最新版www中文网| 日本一区二区黄色| 亚洲黄色片免费看| 日本中文一区二区三区| 成人激情在线播放| 麻豆传媒在线完整视频| 成人免费网站入口| 国产美女精品视频免费观看| 天堂av在线一区| 国产91富婆露脸刺激对白| 综合久久综合| 亚洲韩国青草视频| 日本道色综合久久| 青青草在线视频免费观看| 国产一区二区主播在线| 少妇性l交大片7724com| 国产美女高潮久久白浆| 69久久夜色精品国产69乱青草| 99re免费视频精品全部| 榴莲视频成人app| 麻豆av电影| 亚洲色图另类色图| 一本一道精品欧美中文字幕| 日韩专区精品| 逼特逼视频在线| 蜜桃视频在线观看网站| 四虎永久在线精品无码视频| 欧美aaa一级片| 圆产精品久久久久久久久久久| 91成人在线免费视频| 国产精品3区| 午夜精品久久久久久久99热影院| 亚洲激精日韩激精欧美精品| 成人激情免费网站| wwwxx欧美| www.香蕉视频在线观看| 亚洲欧美激情在线观看| 亚洲天堂网中文字| 玩弄japan白嫩少妇hd| 日本在线免费观看视频| 狠狠综合久久av| 欧美日韩在线看| 中文字幕一二三四| 成人做爰www看视频软件| 国精产品一区一区三区四川| 最新av网址在线观看| 精品婷婷色一区二区三区蜜桃| 亚洲中文字幕无码av| 国产精品视频久久久| 成年人网站免费在线观看| 日韩av网站在线免费观看| 中国动漫在线观看完整版免费| 超碰91在线观看| 国产综合中文字幕| 欧美在线制服丝袜| 99精品全国免费观看视频软件| 国产日韩欧美高清在线| 91成人理论电影| 残酷重口调教一区二区| 国产精品久久无码一三区| 色哟哟网站入口亚洲精品| 激情久久中文字幕| 欧美日韩大尺度| 国产在线美女| 中文字幕在线视频不卡| 午夜精品视频一区二区三区在线看| 国产视频在线播放| 亚洲电影网站| 国产精品天天看天天狠| 182午夜在线观看| 国产黑人绿帽在线第一区| 国产精品久久久一区麻豆最新章节| 日韩av福利| 女人被狂躁到高潮的免费| 懂色中文一区二区在线播放| sese在线| 亚洲日本香蕉视频| 久久精品影视伊人网| 中文字幕日本一区二区| 欧洲黄色一级视频| 欧美老女人性生活视频| 亚洲激情综合| caoporn国产| julia中文字幕久久亚洲蜜臀| 日韩午夜在线观看| 8050国产精品久久久久久| av在线亚洲天堂| 精品国产成人av在线免| 日韩在线观看免费高清完整版| 国产成人精品视频免费看| 日韩影片中文字幕| 青青视频免费在线| 亚州精品一二三区| 久久精品一区二区| 在线观看免费污视频| 久久久9999久久精品小说| 中文字幕2区| 日本肉肉一区| 手机av在线免费| 国产农村妇女精品一区二区| 欧美日韩精品在线一区二区| 亚洲精品国精品久久99热| 成人18免费入口| 99久久精品一区二区成人| 理论电影国产精品| 日本在线视频免费观看| 亚洲欧美日韩国产成人精品影院| 91丨九色丨蝌蚪| 一本大道av一区二区在线播放| 理论在线观看| 国产欧美日韩中文| 在线观看欧美| 亚洲国产1区| 欧美成人综合网站| 欧美色videos| 国产粉嫩一区二区三区在线观看| 中文字幕一区二区三区色视频| 欧美专区福利在线| 91中文在线观看| 日韩xxx视频| 欧美高清一级大片| 7777精品久久久大香线蕉| 天堂a√中文在线| 久久aⅴ乱码一区二区三区| 免费男女羞羞的视频网站中文子暮| 久草福利资源在线| 国产小视频免费在线网址| 久久精品青草| 国产不卡在线视频| 国产精品视频免费一区| 日韩在线视频网| 日本欧美一区二区三区乱码| 国产日本欧美在线观看| 欧美日韩在线大尺度| 激情小说网站亚洲综合网| 久久91麻豆精品一区| 国产一区二区免费| 国产尤物精品| 成人午夜精品福利免费| 国产精品一线二线三线| 男人的天堂最新网址| 国产91美女视频| 国产成人生活片| 美女航空一级毛片在线播放| 国产精品探花一区二区在线观看| 国产欧美日韩中文字幕在线| 久久国产天堂福利天堂| 视频一区视频二区中文字幕| 丝袜美腿亚洲色图| 亚洲欧美国产高清va在线播| 亚洲福利精品在线| 白丝校花扒腿让我c| 久久91麻豆精品一区| 久久久99精品视频| 久久uomeier| 色www免费视频| 午夜剧场免费在线观看| 亚洲一区二区黄| 国产在线精品自拍| 中文字幕一区二区三区乱码在线| 中文字幕在线免费不卡| 姑娘第5集在线观看免费好剧| 欧洲精品久久久久毛片完整版| 久久精品女人天堂av免费观看| 女女百合国产免费网站| 欧美日韩国产系列| 国内精彩免费自拍视频在线观看网址| 久久久久中文字幕亚洲精品| 亚洲精品亚洲人成在线观看| 无遮挡aaaaa大片免费看| 亚洲av成人无码一二三在线观看| 日韩精品久久久毛片一区二区| 欧美金发大战黑人最粗videos| 国产一区二区三区高清视频| 在线精品观看| 日本人妻一区二区三区| 92国产精品观看| 午夜成在线www| 日本视频一二区| 鲁啊鲁视频在线精品| 一起草av在线| av资源在线免费观看| 国产aⅴ精品一区二区三区久久| 精品国产亚洲在线| 免费毛片b在线观看| 最新地址在线观看| 亚洲免费视频中文字幕| 日韩视频免费在线观看| 日韩大陆毛片av|