這篇文章主要為大家詳細(xì)介紹了golang反向代理無法訪問的解決方案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下。
專注于為中小企業(yè)提供成都網(wǎng)站制作、網(wǎng)站設(shè)計服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)鐵嶺免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。首先,我們來看一下如何得到一個反向代理結(jié)構(gòu)體
func NewSingleHostReverseProxy(target *url.URL) *ReverseProxy { targetQuery := target.RawQuery director := func(req *http.Request) { req.URL.Scheme = target.Scheme req.URL.Host = target.Host req.URL.Path = singleJoiningSlash(target.Path, req.URL.Path) if targetQuery == "" || req.URL.RawQuery == "" { req.URL.RawQuery = targetQuery + req.URL.RawQuery } else { req.URL.RawQuery = targetQuery + "&" + req.URL.RawQuery } if _, ok := req.Header["User-Agent"]; !ok { req.Header.Set("User-Agent", "") } } return &ReverseProxy{Director: director} }
NewSingleHostReverseProxy用了一個閉包作為Director新建了一個ReverseProxy結(jié)構(gòu)體,director就是它為我們默認(rèn)實現(xiàn)的代理函數(shù)。在這個函數(shù)中重寫了請求URL的協(xié)議、Host和Path等。但是它沒有重寫req.Host,這也就導(dǎo)致了我們的反向代理只能在本地進(jìn)行代理。所以我們只要對這個函數(shù)進(jìn)行修改就可以了,有兩種方式可以修改。
修改方法:
1、我們可以將NewSingleHostReverseProxy函數(shù)拷貝出來進(jìn)行修改,反正這個函數(shù)也不復(fù)雜,然后在需要用到反向代理結(jié)構(gòu)體的地方用我們自定義的函數(shù)新建代理器。
func NewProxy(target *url.URL) *httputil.ReverseProxy { targetQuery := target.RawQuery director := func(req *http.Request) { req.Host = target.Host // -- 加入這句 -- req.URL.Scheme = target.Scheme req.URL.Host = target.Host req.URL.Path = singleJoiningSlash(target.Path, req.URL.Path) if targetQuery == "" || req.URL.RawQuery == "" { req.URL.RawQuery = targetQuery + req.URL.RawQuery } else { req.URL.RawQuery = targetQuery + "&" + req.URL.RawQuery } if _, ok := req.Header["User-Agent"]; !ok { // explicitly disable User-Agent so it's not set to default value req.Header.Set("User-Agent", "") } } return &httputil.ReverseProxy{Director: director} }
然后將httputil.NewSingleHostReverseProxy(u)替換成NewProxy(u)就可以代理到其他域名了。
2、自定義Director函數(shù)。我們還是用NewSingleHostReverseProxy函數(shù)新建代理器,然后自定義一個Director函數(shù)給它。
p := httputil.NewSingleHostReverseProxy(u) d := p.Director p.Director = func(r *http.Request) { d(r) r.Host = u.Host }
關(guān)于golang反向代理無法訪問的解決方案就分享到這里了,當(dāng)然并不止以上和大家分析的辦法,不過小編可以保證其準(zhǔn)確性是絕對沒問題的。希望以上內(nèi)容可以對大家有一定的參考價值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。
當(dāng)前文章:golang反向代理無法訪問的解決方案-創(chuàng)新互聯(lián)
鏈接分享:http://vcdvsql.cn/article6/dgoiig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、軟件開發(fā)、手機網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、網(wǎng)站制作、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容