go proxy 實現反向代理

wacho發表於2021-06-18

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

代理程式碼

package main

import (
   "fmt"
 "net/http" "net/http/httputil" "net/url")

func sayHello(w http.ResponseWriter, r *http.Request) {
//這裡定義代理目標地址,這裡定義到本機9091埠
   u, _ := url.Parse("http://127.0.0.1:9091/")
   proxy := httputil.NewSingleHostReverseProxy(u)
   proxy.ServeHTTP(w, r)
}

func main() {
   http.HandleFunc("/hello", sayHello)
   err := http.ListenAndServe(":9090", nil)
   if err != nil {
      fmt.Println("HTTP server failed,err:", err)
      return
  }
}

最終目的碼

package main

import (
   "fmt"
 "net/http")

func sayHello(w http.ResponseWriter, r *http.Request) {
   fmt.Println("hello,這裡是s2服務裡的say Hello")
}
func main() {
   http.HandleFunc("/hello", sayHello)
   err := http.ListenAndServe(":9091", nil)
   if err != nil {
      fmt.Println("HTTP server failed,err:", err)
      return
  }
}

透過以上程式碼,可以看出,我是把9090的埠sayHello函式,代理到了本機9091埠的sayHello函式。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章