package main
import (
"context"
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"net/http/httputil"
"net/url"
"time"
)
// NewProxy takes target host and creates a reverse proxy
// NewProxy 拿到 targetHost 后,创建一个反向代理
func NewProxy(targetHost string) (*httputil.ReverseProxy, error) {
remoteAddr, err := url.Parse(targetHost)
if err != nil {
return nil, err
}
return httputil.NewSingleHostReverseProxy(remoteAddr), nil
}
func work(addr string) *http.Server {
srv := &http.Server{
Addr: ":3002",
Handler: router(),
}
go func() {
err := srv.ListenAndServe()
if err != nil {
fmt.Println("停止")
return
}
}()
return srv
}
func test(c *gin.Context) {
fmt.Println("正则路由")
proxy, err := NewProxy(addr)
if err != nil {
panic(err)
}
proxy.ServeHTTP(c.Writer, c.Request)
fmt.Println("这里可以判断为流量")
}
func router() *gin.Engine {
r := gin.Default()
r.GET("/*all", test)
return r
}
var addr string
func main() {
addr = "http://127.0.0.1:3001"
server := work(addr)
time.Sleep(time.Second * 30)
addr = "http://127.0.0.1:30002"
fmt.Println("停止之前的服务器")
server.Shutdown(context.Background())
work(addr)
for {
time.Sleep(time.Second)
}
}