go語言寫代理 go語言哪些公司在用

golang 反向代理實(shí)例

首先解釋一下反向代理,所謂的反向代理就是代理服務(wù)器,充當(dāng)Web服務(wù)器網(wǎng)關(guān)的代理服務(wù)器。當(dāng)請(qǐng)求發(fā)送到使用反向代理的Web服務(wù)器時(shí),他們將先轉(zhuǎn)到反向代理,由該代理將確定是將其路由到制定的Web服務(wù)器。

成都創(chuàng)新互聯(lián)一直通過網(wǎng)站建設(shè)和網(wǎng)站營(yíng)銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以做網(wǎng)站、成都做網(wǎng)站、移動(dòng)互聯(lián)產(chǎn)品、成都全網(wǎng)營(yíng)銷服務(wù)為核心業(yè)務(wù)。10余年網(wǎng)站制作的經(jīng)驗(yàn),使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價(jià)格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡(jiǎn)單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。

這個(gè)程序是將 本地的8086 端口作為代理服務(wù)器,代理上篇 golang HTTP實(shí)例 里面的8090端口

核心只有一個(gè)函數(shù) httputil.NewSingleHostReverseProxy

兩個(gè)服務(wù)同時(shí)運(yùn)行

效果如下:

代理服務(wù)器訪問 8086端口時(shí)候

訪問原始的端口8090時(shí)候

如何用Go語言打造一個(gè)高性能MySQL Proxy

讀取配置文件并啟動(dòng),在配置文件中設(shè)置的監(jiān)聽端口監(jiān)聽客戶端請(qǐng)求。

收到客戶端連接請(qǐng)求后,啟動(dòng)一個(gè)goroutine單獨(dú)處理該請(qǐng)求。

首選進(jìn)行登錄驗(yàn)證,驗(yàn)證過程完全兼容MySQL認(rèn)證協(xié)議,由于用戶名和密碼在配置文件中已經(jīng)設(shè)置好,所以可以利用該信息驗(yàn)證連接請(qǐng)求是否合法。

當(dāng)用戶名和密碼都正確時(shí),轉(zhuǎn)入下面的步驟,否則返回出錯(cuò)信息給客戶端。

認(rèn)證通過后,客戶端發(fā)送SQL語句。

kingshard對(duì)客戶端發(fā)送過來的SQL語句,進(jìn)行詞法和語義分析,識(shí)別出SQL的類型和生成SQL的路由計(jì)劃。如果有必要還會(huì)改寫SQL,然后轉(zhuǎn)發(fā)到相應(yīng)的DB。也有可能不做詞法和語義分析直接轉(zhuǎn)發(fā)到相應(yīng)的后端DB。如果轉(zhuǎn)發(fā)SQL是分表且跨多個(gè)DB,則每個(gè)DB對(duì)應(yīng)啟動(dòng)一個(gè)goroutine發(fā)送SQL和接收該DB返回的結(jié)果。

接收并合并結(jié)果,然后轉(zhuǎn)發(fā)給客戶端。

[golang] fasthttp 使用http代理

golang net/http標(biāo)準(zhǔn)庫的client是可以配置各種代理的,http/https/sock5等,不過fasthttp僅支持配置sock5代理,通過定義fasthttp dialfunc實(shí)現(xiàn):

項(xiàng)目中碰到的問題是,ops只提供了用squid搭建的http代理,所以是想重新定義一個(gè)http代理的dialfunc,找了fasthttp github倉庫的issue,作者提供了一個(gè)dialFunc

經(jīng)測(cè)試,訪問https的站點(diǎn)是OK的,訪問http的站點(diǎn)不行,代理連接不上。先說一下http/https代理的區(qū)別,再說原因。

使用代理訪問https網(wǎng)站時(shí),會(huì)先發(fā)CONNECT請(qǐng)求,讓代理與目標(biāo)站點(diǎn)建立一個(gè)http tunnel,之后在這個(gè)tunnel基礎(chǔ)上進(jìn)行傳輸,對(duì)應(yīng)到上面的dialFunc過程就是:

可以看到http站點(diǎn)是不需要發(fā)CONNECT請(qǐng)求的,而是直接將目標(biāo)站點(diǎn)的url作為path 填寫在http請(qǐng)求頭中。

為何上面的dialfunc訪問http站點(diǎn)不行呢,查了squid代理的文檔,發(fā)現(xiàn)squid默認(rèn)會(huì)禁止非https站點(diǎn)通過CONNECT方法建立通道,自己搭了個(gè)squid代理去掉配置項(xiàng),發(fā)現(xiàn)上面的dialfunc是可以訪問http、https站點(diǎn)的,就是說http,https都先建立通過,再請(qǐng)求。

看了fasthttp的源碼,沒辦法在請(qǐng)求前修改request header中的path為目標(biāo)站點(diǎn)url,所以如果需要通過fasthttp使用http代理,那么可以使用上面的dialfunc,同時(shí)代理需要允許非443端口的站點(diǎn)可以建立通道。如果做不到這一點(diǎn),那么還是建議使用標(biāo)準(zhǔn)庫net/http的client,會(huì)更方便一點(diǎn)。

文章名稱:go語言寫代理 go語言哪些公司在用
本文網(wǎng)址:http://www.muchs.cn/article2/dohisic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站改版企業(yè)網(wǎng)站制作、App設(shè)計(jì)、網(wǎng)站維護(hù)自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)