Golang实现反向代理

最近服务器上的nginx代理的博客,总是出现"连接被重置",考虑自己做一个代理。但不知道https和阿里和微信收费部份是否有受影响。


package main

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

type Proxy struct {
	RequestHost string //主机请求
	ServerHost  string //真实服务端
}

var myProxy []Proxy = []Proxy{
	Proxy{"127.0.0.1", "127.0.0.1:3000"},
	Proxy{"aaa.scwy.net", "wyyyh.3322.org:8181"},
}

func helloHandler(w http.ResponseWriter, r *http.Request) {
	//默认服务内容
	trueServer := "127.0.0.1:3000"
	//匹配代理服务
	for _, n := range myProxy {
		if n.RequestHost == r.Host {
			trueServer = n.ServerHost
			r.Header.Set("ProxyServer", "EaseGo")  //这个没成功,继续研究
		}
	}

	//向代理获取数据
	url, err := url.Parse("http://" + trueServer)
	if err != nil {
		log.Println(err)
		return
	}

	proxy := httputil.NewSingleHostReverseProxy(url)
	proxy.ServeHTTP(w, r)

}

func main() {
	http.HandleFunc("/", helloHandler)
	log.Fatal(http.ListenAndServe(":80", nil))
}

相关文章