golang 反向代理实例

首先解释一下反向代理,所谓的反向代理就是代理服务器,充当Web服务器网关的代理服务器。当请求发送到使用反向代理的Web服务器时,他们将先转到反向代理,由该代理将确定是将其路由到制定的Web服务器。

这个程序是将 本地的8086 端口作为代理服务器,代理上篇golang HTTP实例 里面的8090端口

核心只有一个函数 httputil.NewSingleHostReverseProxy

package main

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

type ServerHandle struct {
}

func (this *ServerHandle) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    remote, err := url.Parse("http://127.0.0.1:8090")
    if err != nil {
        panic(err)
    }
    proxy := httputil.NewSingleHostReverseProxy(remote)
    proxy.ServeHTTP(w, r)
}

func main() {
    err := http.ListenAndServe(":8086", &ServerHandle{})
    if err != nil {
        log.Fatalln("ListenAndServe: ", err)
    }
}

两个服务同时运行
效果如下:
代理服务器访问 8086端口时候

curl  http://127.0.0.1:8086/abc
Hello world,/abc!

访问原始的端口8090时候

curl  http://127.0.0.1:8090/abc
Hello world,/abc!

你可能感兴趣的:(golang 反向代理实例)