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