golang實現的反向 Proxy

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

翻閱golang包手冊的時候看到net/http/httputil有一個type ReverseProxy,這個不是反向 Proxy嗎!golang內建反向 Proxy功能?好奇就試了一下,確實非常簡單,沒有幾行代碼就實現了一個簡易的反向 Proxy服務。

關於反向 Proxy百度百科上說的非常詳細了,這裡摘錄一下定義:

反向 Proxy(Reverse Proxy)方式是指以Proxy 伺服器來接受internet上的串連請求,然後將請求轉寄給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求串連的用戶端,此時Proxy 伺服器對外就表現為一個反向 Proxy伺服器。

golang實現代碼

package mainimport ("log""net/http""net/http/httputil""net/url")type handle struct {host stringport string}func (this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) {remote, err := url.Parse("http://" + this.host + ":" + this.port)if err != nil {panic(err)}proxy := httputil.NewSingleHostReverseProxy(remote)proxy.ServeHTTP(w, r)}func startServer() {//被代理的伺服器host和porth := &handle{host: "127.0.0.1", port: "80"}err := http.ListenAndServe(":8888", h)if err != nil {log.Fatalln("ListenAndServe: ", err)}}func main() {startServer()}

關鍵的代碼就是NewSingleHostReverseProxy這個方法,查看源碼的話不難看出該方法返回了一個ReverseProxy對象,在ReverseProxy中的ServeHTTP方法實現了這個具體的過程,主要是對源http包頭進行重新封裝,而後發送到後端伺服器。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.