golang 简版反向代理

golang 简版反向代理

package main

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

func main()  {
	http.HandleFunc("/", handler)
	log.Println("start serving on port" + port)

	err := http.ListenAndServe(":"+port, nil)
	if err != nil {
		log.Fatal(err)
	}
}

var (
	proxy_addr = "http://127.0.0.1:2003"
	port = "2002"
)

func handler(w http.ResponseWriter, r *http.Request)  {
	// 解析代理地址,更改请求体的协议和主机
	proxy, err := url.Parse(proxy_addr)
	r.URL.Scheme = proxy.Scheme
	r.URL.Host = proxy.Host

	// 请求下游
	transport := http.DefaultTransport
	resp, err := transport.RoundTrip(r)
	if err != nil{
		log.Print(err)
		return
	}

	// 把下游请求内容 返回给 上游
	for k, v2header := range resp.Header {
		for _, v := range v2header {
			w.Header().Add(k, v)
		}
	}

	defer resp.Body.Close()
	bufio.NewReader(resp.Body).WriteTo(w)
}
复制代码

启动 真实服务器

$go run /d/Dev/workplace/golang/gateway_v1/pratise/proxy/reverse_proxy/reverse_proxy_v1/real_server/main.go
2021/06/12 17:59:24 starting httpserver at 127.0.0.1:2003
2021/06/12 17:59:24 starting httpserver at 127.0.0.1:2004
复制代码

测试 真实服务器

$ curl 'http://127.0.0.1:2003/sda?sda=111'
http://127.0.0.1:2003/sda
RemoteAddr=127.0.0.1:49795,X-Forwarded-For=,X-Real-Ip=
headers =map[Accept:[*/*] User-Agent:[curl/7.69.1]]


$ curl 'http://127.0.0.1:2004/sda?sda=111'
http://127.0.0.1:2003/sda
RemoteAddr=127.0.0.1:49795,X-Forwarded-For=,X-Real-Ip=
headers =map[Accept:[*/*] User-Agent:[curl/7.69.1]]
复制代码

启动 代理服务器

$go run /d/Dev/workplace/golang/gateway_v1/pratise/proxy/reverse_proxy/reverse_proxy_v1/reverse_proxy_base/main.go
2021/06/12 18:32:21 start serving on port2002
复制代码

测试 代理服务器

$ curl 'http://127.0.0.1:2002/sda?sda=111'

# 转发至 2003 并返回
http://127.0.0.1:2003/sda
RemoteAddr=127.0.0.1:57595,X-Forwarded-For=,X-Real-Ip=
headers =map[Accept:[*/*] Accept-Encoding:[gzip] User-Agent:[curl/7.69.1]]

复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享