【世界时快讯】Go语言正/反向代理的姿势
先重温一下什么叫反向代理,正向代理。
鹅厂二面,nginx回忆录[1]
(资料图)
所谓正向,反向代理取决于代理的是出站请求,还是入站请求。
正向代理:代理的出站请求, 客户端能感知到代理程序,架构上距离客户端更近。反向代理:代理的是入站请求,客户端认为代理程序就是服务器,客户端感知不到代理逻辑,架构上距离服务端更近。
前几天利用golang实现反向代理程序[2],引出了Host请求头在反代中的关键作用。
packagemainimport("fmt""log""net/http""net/http/httputil")// 将对proxy.com/xxx/yyy的请求转发到 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)}}
以上访问localhost:8080, 在浏览器会显示www.baidu.com的内容。
--------------------------------------------------------
这几天刚好遇到了一个正向代理的case, 简单记录一下。
packagemainimport("fmt""log""net/http""net/http/httputil")// 集群请求外部节点,通过代理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)}}
其中要注意的就是,正向代理式要规避死循环代理。
使用该服务作为代理程序,将可以出站访问任何地址( curl -x 指令后面代理地址)。
使用时,针对httpclient 设置proxy。
//addingtheproxysettingstotheTransportobjecttransport:=&http.Transport{Proxy:http.ProxyURL(proxyURL),}//addingtheTransportobjecttothehttpClientclient:=&http.Client{Transport:transport,}
下面使用curl指令快速验证: curl -x 127.0.0.1:8080 www.baidu.com
引用链接[1]鹅厂二面,nginx回忆录:https://www.cnblogs.com/JulianHuang/p/14504892.html[2]golang实现反向代理程序:https://www.cnblogs.com/JulianHuang/p/16639016.html
本文文字和制图均为原创,鄙人会不时更正认知、修正理解,鉴于公众号编辑次数受限,请不时关注左下角永久更新地址, 也欢迎斧正;如果对您有所帮助,一键三连,甚是欣慰。
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...