Documentation
¶
Overview ¶
Package webproxy is a simple http proxy tool.
Refer:
https://github.com/nodejitsu/node-http-proxy https://github.com/chimurai/http-proxy-middleware "golang.org/x/net/proxy" -> proxy.SOCKS5()
使用说明:
1. 作为中间件 - 匹配成功就代理请求,否则跳过当前请求。
proxy.New("/api", some options)
proxy.New([]string{"/api", "/v1/api"}, some options)
2. 直接作为路由path handler - 代理此路由下的所有请求(相当于作为中间件时,ctx为一个url path)
router.GET("/api", proxy.All(some options))
http.HandleFunc("/api", proxy.All(some options))
参数说明:
proxy.New() 接收两个参数:第一个是要匹配的信息,第二个是一些选项设置
关于参数 'ctx',它允许为:
empty:
nil - matches any path, all requests will be proxied.
path matching(string - a URL path, support wildcard):
"/", "**" - matches any path, all requests will be proxied.
"/api" - matches paths starting with /api
"**/*.html" - matches any path which ends with .html
"/*.html" - matches paths directly under path-absolute
"!**/bad.json" - exclusion
multiple path matching([]string - multi URL path, support wildcard).
[]string{"/api", "/v1/api", "/some/**/special-api"}
custom validate func:
FilterFunc - must be type of FilterFunc. return True, proxy current request
Index ¶
Constants ¶
View Source
const ( CtxIsEmpty = "empty" CtxIsString = "string" CtxIsStrings = "strings" CtxIsFilter = "func" )
the Proxy ctx data type name
Variables ¶
This section is empty.
Functions ¶
func MultiHostReverseProxy ¶
func MultiHostReverseProxy(targets ...*url.URL) *httputil.ReverseProxy
MultiHostReverseProxy create a global reverse proxy. usage:
rp := MultiHostReverseProxy(&url.URL{
Scheme: "http",
Host: "localhost:9091",
}, &url.URL{
Scheme: "http",
Host: "localhost:9092",
})
log.Fatal(http.ListenAndServe(":9090", rp))
Types ¶
type FilterFunc ¶
FilterFunc custom filter to check if it should be proxy or not
type Options ¶
type Options struct {
// open debug
Debug bool
// WS enable webSocket proxy
WS bool
// Target url string. eg. "http://www.example.org"
// Notice:
// Target and Forward cannot be both missing
Target string
// Forward url string.
Forward string
// IgnorePath specify whether you want to ignore the proxy path of the incoming request. Default: false
IgnorePath bool
// ChangeOrigin changes the origin of the host header to the target URL. Default: false
// for vhosted sites, changes host header to match to target's host
ChangeOrigin bool
// Auth is basic authentication i.e. 'user:password' to compute an Authorization header.
Auth string
// WS bool
// PathRewrite url path rewrite
// {
// '^/api/old-path' : '/api/new-path', // rewrite path
// '^/api/remove/path' : '/path' // remove base path
// '^/' : '/basePath/' // add base path
// },
PathRewrite map[string]string
LogLevel int
// LogOutput
// Example:
// LogOutput = os.Stdout
// LogOutput = new(bytes.Buffer)
// LogOutput, _ = os.OpenFile("proxy.log", os.O_RDWR|os.O_CREATE, os.ModePerm)
LogOutput io.Writer
//
Events map[string]func(args ...interface{}) error
// Routes table, if match success, will override Target.
//
// Example:
// {
// // when request.headers.host == 'dev.localhost:3000',
// // override target 'http://www.example.org' to 'http://localhost:8000'
// "dev.localhost:3000" : "http://localhost:8000"
// }
Routes map[string]string
}
Options for proxy.
type Proxy ¶
type Proxy struct {
// contains filtered or unexported fields
}
Proxy definition
func (*Proxy) HandlerFunc ¶
func (p *Proxy) HandlerFunc() http.HandlerFunc
HandlerFunc return http.HandlerFunc
func (*Proxy) Middleware ¶
Middleware of the interface http.Handler
Click to show internal directories.
Click to hide internal directories.