【世界時(shí)快訊】Go語(yǔ)言正/反向代理的姿勢(shì)
先重溫一下什么叫反向代理,正向代理。
鵝廠二面,nginx回憶錄[1]
(資料圖)
所謂正向,反向代理取決于代理的是出站請(qǐng)求,還是入站請(qǐng)求。
正向代理:代理的出站請(qǐng)求, 客戶端能感知到代理程序,架構(gòu)上距離客戶端更近。反向代理:代理的是入站請(qǐng)求,客戶端認(rèn)為代理程序就是服務(wù)器,客戶端感知不到代理邏輯,架構(gòu)上距離服務(wù)端更近。
前幾天利用golang實(shí)現(xiàn)反向代理程序[2],引出了Host請(qǐng)求頭在反代中的關(guān)鍵作用。
packagemainimport("fmt""log""net/http""net/http/httputil")// 將對(duì)proxy.com/xxx/yyy的請(qǐng)求轉(zhuǎn)發(fā)到 www.baidu.com/xxx/yyyfuncReverseProxyHandler(whttp.ResponseWriter,r*http.Request){fmt.Println("receivearequestfrom:",r.RemoteAddr,r.Header)target:="www.baidu.com"director:=func(req*http.Request){req.URL.Scheme="https"req.URL.Host=targetreq.Host=target}proxy:=&httputil.ReverseProxy{Director:director}proxy.ServeHTTP(w,r)}funcmain(){fmt.Printf("Startingserveratport8080\n")iferr:=http.ListenAndServe(":8080",http.HandlerFunc(ReverseProxyHandler));err!=nil{log.Fatal(err)}}
以上訪問(wèn)localhost:8080, 在瀏覽器會(huì)顯示www.baidu.com的內(nèi)容。
--------------------------------------------------------
這幾天剛好遇到了一個(gè)正向代理的case, 簡(jiǎn)單記錄一下。
packagemainimport("fmt""log""net/http""net/http/httputil")// 集群請(qǐng)求外部節(jié)點(diǎn),通過(guò)代理funcProxyHandler(whttp.ResponseWriter,r*http.Request){fmt.Printf("receivearequestfrom{0}{1}:\n",r.RemoteAddr,r.Header)ifr.Host!="localhost:8080"{director:=func(req*http.Request){req.URL.Scheme="http"req.URL.Host=r.Hostreq.Host=r.Host}proxy:=&httputil.ReverseProxy{Director:director}proxy.ServeHTTP(w,r)}else{http.NotFound(w,r)}}funcmain(){iferr:=http.ListenAndServe(":8080",http.HandlerFunc(ProxyHandler));err!=nil{log.Fatal(err)}}
其中要注意的就是,正向代理式要規(guī)避死循環(huán)代理。
使用該服務(wù)作為代理程序,將可以出站訪問(wèn)任何地址( curl -x 指令后面代理地址)。
使用時(shí),針對(duì)httpclient 設(shè)置proxy。
//addingtheproxysettingstotheTransportobjecttransport:=&http.Transport{Proxy:http.ProxyURL(proxyURL),}//addingtheTransportobjecttothehttpClientclient:=&http.Client{Transport:transport,}
下面使用curl指令快速驗(yàn)證: curl -x 127.0.0.1:8080 www.baidu.com
引用鏈接[1]鵝廠二面,nginx回憶錄:https://www.cnblogs.com/JulianHuang/p/14504892.html[2]golang實(shí)現(xiàn)反向代理程序:https://www.cnblogs.com/JulianHuang/p/16639016.html
本文文字和制圖均為原創(chuàng),鄙人會(huì)不時(shí)更正認(rèn)知、修正理解,鑒于公眾號(hào)編輯次數(shù)受限,請(qǐng)不時(shí)關(guān)注左下角永久更新地址, 也歡迎斧正;如果對(duì)您有所幫助,一鍵三連,甚是欣慰。
關(guān)鍵詞: 反向代理 外部節(jié)點(diǎn) 注意的就是
相關(guān)閱讀
-
世界熱推薦:今晚7:00直播丨下一個(gè)突破...
今晚19:00,Cocos視頻號(hào)直播馬上點(diǎn)擊【預(yù)約】啦↓↓↓在運(yùn)營(yíng)了三年... -
NFT周刊|Magic Eden宣布支持Polygon網(wǎng)...
Block-986在NFT這樣的市場(chǎng),每周都會(huì)有相當(dāng)多項(xiàng)目起起伏伏。在過(guò)去... -
環(huán)球今亮點(diǎn)!頭條觀察 | DeFi的興衰與...
在比特幣得到機(jī)構(gòu)關(guān)注之后,許多財(cái)務(wù)專(zhuān)家預(yù)測(cè)世界將因?yàn)榧用茇泿诺?.. -
重新審視合作,體育Crypto的可靠關(guān)系才能雙贏
Block-987即使在體育Crypto領(lǐng)域,人們的目光仍然集中在FTX上。隨著... -
簡(jiǎn)訊:前端單元測(cè)試,更進(jìn)一步
前端測(cè)試@2022如果從2014年Jest的第一個(gè)版本發(fā)布開(kāi)始計(jì)算,前端開(kāi)發(fā)... -
焦點(diǎn)熱訊:劉強(qiáng)東這波操作秀
近日,劉強(qiáng)東發(fā)布京東全員信,信中提到:自2023年1月1日起,逐步為...