Golang 中的反向代理

爱包子的鱼 本文由博客端 http://solo.oook.fun 主动推送

Golang 中的反向代理

package main

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

type handler struct {
	host  string
	port  string
	proxy http.Handler
}

func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	log.Printf("%s %s %s\n", r.Method, r.URL, r.Host)
	h.proxy.ServeHTTP(w, r)
}

func newHandler(host, port string) *handler {
	h := &handler{
		host: host,
		port: port,
	}
	remote, err := url.Parse("http://" + h.host + ":" + h.port)
	if err != nil {
		panic(err)
	}
	h.proxy = httputil.NewSingleHostReverseProxy(remote)
	return h
}

func main() {
	h := newHandler("127.0.0.1", "80")
	err := http.ListenAndServe(":8000", h)
	if err != nil {
		log.Fatalln("ListenAndServe: ", err)
	}
}
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    437 引用 • 1346 回帖 • 657 关注

赞助商 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • fe

    remote, err := url.Parse("http://" + h.host + ":" + h.port)

    h.proxy = httputil.NewSingleHostReverseProxy(remote)